我现在正在做的是,每当用户点击按钮时,我正在进行Jquery ajax调用,如果我从此调用获得特定输出,比如说 12345 ,那么我需要创建另一个ajax电话。我可以通过在成功回调中进行第二次ajax调用来轻松实现这一点,但我相信这不是完成任务的好方法。 所以我尝试了不同的方法来实现它。但问题是,我的两个ajax调用并不依赖于彼此。我的意思是,我不需要将数据从 ajax 1 传递到 ajax2 。我只有在第一次通话时收到输出 12345 时才需要拨打第二个ajax电话。所以我做的是
var first_call= ajax_call_1;
ajax_call_1.done(function(data)
{
if(data==='1234')
{
// call a function which will perform the second ajax call
}
else
{
// do nothing
}
});
所以我的问题是,还有其他方法可以实现吗?我的意思是更好的方法吗?我是 jquery延迟对象和承诺的新手。我现在正在阅读文档。我感谢所有帮助。
答案 0 :(得分:0)
$(document).ready(function(){
$.ajax({
url: '/path/to/file',
type: 'default GET (Other values: POST)',
dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)',
data: {param1: 'value1'},
})
.done(function(data) {
if (data==='1234') {
nextAjax(data);
}
})
function nextAjax(DataFromFirstAjax) {
console.log(DataFromFirstAjax);
$.ajax({
url: '/path/to/file',
type: 'default GET (Other values: POST)',
dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)',
data: {param1: 'value1'},
})
.done(function(data) {
console.log('done!');
})
}
});
试试这个。当第一个ajax完成后,函数nextAjax(DataFromFirstAjax);使用下一个ajax和数据
答案 1 :(得分:0)
我只需要在第一次通话时收到输出12345,即可进行第二次ajax通话
这当然意味着他们相互依赖。
通过至少一点信息(是否要进行通话)。还有其他方法可以实现吗?我的意思是更好的方法吗?
是。您可以(并且应该)使用.then()
方法来链接异步函数。这也将减少嵌套。
$.ajax({…}) // first call
.then(function(data) { // results of first call
if (data == 12345)
return $.ajax({…}) // second call
// ^^^^^^ always return promises from functions that do something asynchronous
else return data; // maybe pass through first data (omit if you don't need it)
}) // a promise that resolves after the second ajax call (or immediately if none is made)
.then(function(data) { // results of second call, or passed through values
console.log("one or two calls are done");
});