我正在使用jQuery AJAX调用Web服务。电话必须被链接。根据{{3}}的解决方案,我创建了一个AJAX队列。
function ajaxQueue(step) {
switch(step) {
case 0: $.ajax({
type: "POST",
url: "url",
data: SoapRequest1,
contentType: "text/xml",
complete: storeData1
}); break;
case 1: $.ajax({
type: "POST",
url: "url",
data: SoapRequest2,
contentType: "text/xml",
complete: storeData2
}); break;
case 2: $.ajax({
type: "POST",
url: "url",
data: SoapRequest3,
contentType: "text/xml",
complete: storeData3
}); break;
}
}
//start ajaxQueue
ajaxQueue(0);
function storeData1(xmlHttpRequest, status)
{
updateData1(xmlHttpRequest.responseXML);
ajaxQueue(1);
}
function storeData2(xmlHttpRequest, status)
{
updateData2(xmlHttpRequest.responseXML);
ajaxQueue(2);
}
function storeData3(xmlHttpRequest, status)
{
updateData3(xmlHttpRequest.responseXML);
}
现在我遇到以下问题:如果执行该函数,则只有第一种情况从webservice返回正确的XML。第二次和第三次调用导致错误。 (parseerror,data为null)。
这些电话是跨域的,由以下人员强调:
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
如果我为每个调用添加async:false,则所有调用都会正确执行。 如果我更改了调用的顺序,则始终会正确执行第一个调用。
任何人都可以帮我这个吗?或者告诉我如果您需要更多信息。
谢谢!
答案 0 :(得分:0)
$.ajax( {
url: 'blah.com',
success: function( result ) {
$.ajax( {
url: 'blah.com',
success: function( result ) {
// now in second leg of the chain.
// you can keep going like this forever.
}
} );
}
} );
答案 1 :(得分:0)
使用回调(在AJAX请求完成时调用的东西),将其作为参数传递到队列中:
function ajaxQueue(step, callback) {
switch(step) {
case 0: $.ajax({
type: "POST",
url: "url",
data: SoapRequest1,
contentType: "text/xml",
complete: callback
}); break;
case 1: $.ajax({
type: "POST",
url: "url",
data: SoapRequest2,
contentType: "text/xml",
complete: callback
}); break;
case 2: $.ajax({
type: "POST",
url: "url",
data: SoapRequest3,
contentType: "text/xml",
complete: callback
}); break;
}
}
//start ajaxQueue
ajaxQueue(0, function() {
// do something when ajaxQueue(0) has returned from AJAX call
});
function storeData1(xmlHttpRequest, status)
{
// passes updateData1 as a callback, automatically passes params from AJAX call
ajaxQueue(1, updateData1);
}