AJAX 延迟链接调用
ajax deferred chaining call
我有点困惑我正在使用callone()
的结果来修改全局对象(我不确定是否有更好的方法来执行此操作),试图通过延迟完成此操作。当我调用two()时,全局对象应该用新数据修改
var obj = {};
var id = obj.id;
//global object
$.when(callone(obj)).then(calltwo(id),function(data)
{
});
- 阿贾克斯函数:1
function callone(requiredData)
{
var d = new $.Deferred();
var ajaxCall1 = $.ajax({
type:"POST",
url: 'AB/',
data: requiredData,
success: function(data) {
//return data to the callee?
d.resolve(p_obj);
//set ID on the object
obj.id = data.id;
return obj;
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus + ': ' + errorThrown);
},
always: function(data) { }
});
}
function calltwo(id from callback one)
{
}
我在下面包含一个更简单的实现。
callone()
必须返回延迟或承诺,以便您等待它或将其他操作链接到它,您可以使用$.ajax()
已经返回的承诺,而不是创建自己的承诺。
此外,没有理由在这里使用$.when()
,因为它实际上只在您尝试等待并行运行的多个承诺时才增加价值,而事实并非如此。 因此,您可以只对已有的个人承诺使用 .then()
处理程序。
此外,在处理异步操作时,您确实不想使用全局变量。 您可以链接承诺并将数据直接传递到承诺中。
以下是callone()
应该是什么样子:
function callone(requiredData) {
return $.ajax({
type: "POST",
url: 'AB/',
data: requiredData
});
}
function calltwo(...) {
// similar to callone
// returns promise from $.ajax()
}
callone(...).then(function(data) {
// when callone is done, use the id from its result
// and pass that to calltwo
return calltwo(data.id);
}).then(function(data) {
// process result from calltwo here
}, function(err) {
// ajax error here
});
请注意,此代码不会创建任何新的延迟对象。 它只是使用已经从$.ajax()
返回的承诺. 另请注意,它也没有使用success:
或error:
处理程序,因为这些处理程序也来自承诺。
另请注意,从 .then()
处理程序中返回承诺会自动将其链接到上一个承诺中,因此在新返回的承诺也得到解决之前,不会解析上一个承诺。 这使您可以保持链条运行。
另请注意,从异步回调函数返回数据不会将数据返回给原始函数的调用方,因此您尝试从success:
处理程序返回某些内容未完成任何操作。 相反,请使用承诺并通过承诺返回数据,因为它们专门设计用于将异步数据返回.then()
处理程序。
相关文章:
- 如何调用“;链接_;在onclick事件上使用Javascript
- 使用jquery延迟对象链接多个ajax调用
- 当用户点击动态创建的链接时,如何调用JS方法.JQuery,ASP.NET MVC
- 角度指令's链接函数未被调用
- 打印链接时,将javascript函数调用到链接中
- 如何在点击超链接时调用fullcalendar回调
- 从控制器Angularjs调用链接函数
- 正在创建网页,并希望将外部链接调用为html和css
- 如何进行AJAX调用,使其仅在我单击包含在特定类中的链接时触发;id”;父元素的
- 使用jQuery在链接上调用内联JavaScript
- 如何从 MVC4 链接调用 Javascript 方法(错误 JavaScript 运行时错误:对象不支持此操作)
- 如何在单击超链接时调用同一函数中定义的函数
- Backbone.js的新手,如何从html按钮和链接调用函数
- 添加 JavaScript 变量以单击以调用链接
- 元素在调用链接函数时不在 DOM 中
- 如何在第一个 php 脚本中访问变量 'a' 的值到第二个 php 脚本,并通过 ajax 调用链接
- Javascript异步调用链接
- 使用JavaScript为iframe调用链接
- 调用链接函数指令Angular 1 ES6
- 如何用方法调用链接make对象