我正在努力使用延迟管道连接回调。它似乎工作正常,但在callback2中,它从callback1给我带来了数据。代码如下所示:
var getCall1 = function() {
return $.ajax(url, {
type: "GET",
data: { },
contentType: "application/json",
dataType: "json"
});
}
var getCall2 = function () {
return $.ajax(url, {
type: "GET",
data: {},
contentType: "application/json",
dataType: "json"
});
}
var callback1 = function (data)
{
alert('call 1 completed');
};
var callback2 = function (data)
{
alert('call 2 completed');
};
$.when(getCall1()).done(callBack1).pipe(getCall2()).done(callBack2);
我在这里缺少什么?
- 编辑 -
如果我将它们分成两个延迟调用,它可以工作但是那么是否使用了链接和管道?
$.when(getCall1()).done(callBack1);
$.when(getCall2()).done(callBack2);
- 正确的方法 -
var getCall1 = function() {
return $.ajax(url, {
type: "GET",
data: { },
contentType: "application/json",
dataType: "json"
});
}.pipe(function (d){return d});
var getCall2 = function () {
return $.ajax(url, {
type: "GET",
data: {},
contentType: "application/json",
dataType: "json"
});
}.pipe(function (d){return d});
var callback1 = function (data)
{
alert('call 1 completed');
};
var callback2 = function (data)
{
alert('call 2 completed');
};
$.when(getCall1, getCall2).done(function(d1, d2){
callback1(d1);
callback2(d2);
});
答案 0 :(得分:0)
您应该写pipe(getCall2)
,而不是pipe(getCall2())
。 deferred.pipe()期望回调返回延迟,而不是延迟本身。这是有道理的,因为重点是链接请求(即在第一次完成后才开始第二次ajax调用),并且只有在开始操作后才会得到延迟。
答案 1 :(得分:0)
我在您的代码中理解的是,您只有在成功getCall2
时才能致电getCall1
。
所以你的代码似乎很好。我在jsFiddle中尝试过它(有一个更简单的例子),它对我很有用:
也许这是一个愚蠢的问题,但你确定getCall1和getCall2不应该简单地从服务器返回相同的结果吗?这可以解释为什么在回调1和2中获得相同的数据。
其他问题,在上一个代码示例中,您可以编写
var getCall1 = function() {
return $.ajax(url, {
type: "GET",
data: { },
contentType: "application/json",
dataType: "json"
});
}.pipe(function (d){return d});
最后一个管道是否会改变您的代码行为?
关于你最后一个代码示例的最后一句话,预期的结果是不一样的。在这段代码中你写道,只有当getCall1和getCall2都成功时你才会调用callback1和callback2。这与您的第一个代码的行为不同。
编辑:一个带有实际异步结果的新jsFiddle