Jquery 如何摆脱jsonp跨域调用中的同步调用
下面是Jquery JSONP的两个调用,它是用于跨域调用的,现在当页面加载时,它会触发这两个调用,问题是现在调用非常快,在快速完成之前,它会触发第二个调用,这会导致第二个调用的解析器错误airxml:不是函数 现在,如果调用中有async:false,下面的代码可以正常工作,但根据跨域策略,它不支持同步调用Jquery 如何摆脱jsonp跨域调用中的同步调用,jquery,cross-domain,jsonp,synchronous,Jquery,Cross Domain,Jsonp,Synchronous,下面是Jquery JSONP的两个调用,它是用于跨域调用的,现在当页面加载时,它会触发这两个调用,问题是现在调用非常快,在快速完成之前,它会触发第二个调用,这会导致第二个调用的解析器错误airxml:不是函数 现在,如果调用中有async:false,下面的代码可以正常工作,但根据跨域策略,它不支持同步调用 var oXMLHTTP, i, length, oData, sValue, sDisplay, sName, sMatch, oRegExp; var qr = "&
var oXMLHTTP, i, length, oData, sValue, sDisplay, sName, sMatch, oRegExp;
var qr = "&jsonpcall=true";
if (!oDropdown)
return;
oXMLHTTP = this.createXMLHttpRequest();
this.FilterUrl = sFilterUrl;
if (sFilterUrl != previousFilterUrl)
{
var regUrl = sFilterUrl;
var regquest = $.ajax({
url: regUrl+qr,
type: "GET",
async: false,
cache: true,
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
jsonpCallback: "airport",
success: function(data, textStatus, jqXHR)
{
if (data.result[0] != '')
{
sFilterData = data.result[0];
}
}
});
previousFilterUrl = sFilterUrl;
}
if(!fireRequestOnce ||(fireRequestOnce && retrievedData == null))
{
var regUrl = sXML;
var airquest = $.ajax({
url: regUrl+qr,
async: false,
dataType: 'jsonp',
jsonpCallback: 'airxml',
cache: true,
success: function(data, textStatus, jqXHR)
{
var xmlDoc = $.parseXML(data.myresult);
oData = xmlDoc.documentElement.childNodes;
}
});
}
请建议最好的方法,我曾尝试在成功事件触发后放置变量,然后尝试调用第二个调用,但没有成功。当需要顺序AJAX调用时,请尽量避免使用async:false或jQuery。ajaxSetup{async:false};这些选项所做的是,它将锁定浏览器,直到AJAX调用完成。在这种情况下,我更喜欢pluginby
这个插件将要做的是,它将把所有传入的AJAX请求排队,并一个接一个地处理。如图所示,它的使用非常简单。因此此实现将使用jsonpumm处理跨域调用。。。如果不亲自动手,那么说这个插件也适用于跨域请求,这是不够明智的。您可以尝试或直接询问创建者。就我个人而言,我没有把它用于跨域。我永远不会。我将设置一个服务器端代码,该代码将从另一个域获取数据,并通过同源ajax-call将其发送到前端。您还可以查看jquery.when/then/pipe!您还可以使用递归。