多个链式 jQuery AJAX POST Web 服务调用
Multiple chained jQuery AJAX POST webservice calls
Im using jQuery AJAX Calls to a webservice.调用必须链接。基于 https://stackoverflow.com/a/995648/296575 的解决方案,我创建了一个 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);
}
现在我有以下问题:如果执行该函数,则只有第一种情况从 Web 服务返回正确的 XML。第二次和第三次调用会导致错误。(解析错误,数据为空)。
这些调用是跨域的,由以下因素抑制:
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
如果我将 async:false 添加到每个调用中,则所有调用都会正确执行。如果我更改调用的顺序,则始终正确执行第一个调用。
谁能帮我解决这个问题?或者告诉我,如果你需要更多信息。
谢谢!
嗯,如果我链接 ajax 调用,我只会将第二个调用放在第一个调用成功处理程序或其变体中。
$.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.
}
} );
}
} );
使用回调(在 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);
}
相关文章:
- Python Flask Web服务器未接收到JSON ajax POST请求,服务器返回HTTP 200 OPTION
- 如何使用 AJAX 发送 POST 数据?以及如何在Web API中获取POST数据
- 通过电子邮件将 AJAX POST 发送到 Web API
- How to POST javascript Blob to JAX-WS Web service
- 多个链式 jQuery AJAX POST Web 服务调用
- jQuery ajax post current date time ASP.NET web API
- 如何使用 Web 表单(不是 MVC 或 asmx 页面)从 ajax Http POST 获取 c# 服务器端的复选框
- AngularJS $http.post ASP.NET 具有简单类型参数的 Web API 控制器
- AngularJS允许POST或PUT跨域的Web服务
- 如何使用Angular将JSON和文件POST到web服务
- Python POST JSON-是必需的web框架
- AngularJS$http://.NET Web API-获取400(错误请求)或NULL POST操作方法参数
- 如何在POST方法之后将更改应用于web
- Angular 2 http post null Web Api Core
- 为什么我没有使用$.post()从我的Sinatra web服务获得响应?
- Web API字符串参数和POST值
- 访问javascript端POST请求返回的IEnumerable (web API)
- 如何在R中使用POST从web请求数据
- 使用POST调用RESTFUL web服务
- 跨域$.ajax POST到REST Web服务