Jquery 根据另一个ajax请求的输出生成ajax请求
我现在要做的是,每当用户单击按钮时,我都会进行jqueryajax调用,如果我从这个调用中得到一个特定的输出,比如12345,那么我需要进行另一个ajax调用。通过在成功回调中进行第二次ajax调用,我可以很容易地做到这一点,但我认为这不是一种很好的完成事情的方法。 所以我尝试了不同的方法来实现这一点。但问题是,我的两个ajax调用并不相互依赖。我的意思是,我不需要将数据从ajax1传递到ajax2。只有在收到第一次调用的输出12345时,我才需要进行第二次ajax调用。所以我所做的是Jquery 根据另一个ajax请求的输出生成ajax请求,jquery,ajax,promise,jquery-deferred,Jquery,Ajax,Promise,Jquery Deferred,我现在要做的是,每当用户单击按钮时,我都会进行jqueryajax调用,如果我从这个调用中得到一个特定的输出,比如12345,那么我需要进行另一个ajax调用。通过在成功回调中进行第二次ajax调用,我可以很容易地做到这一点,但我认为这不是一种很好的完成事情的方法。 所以我尝试了不同的方法来实现这一点。但问题是,我的两个ajax调用并不相互依赖。我的意思是,我不需要将数据从ajax1传递到ajax2。只有在收到第一次调用的输出12345时,我才需要进行第二次ajax调用。所以我所做的是 var
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延迟对象和承诺。我现在正在浏览文档。我感谢所有的帮助
$(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完成时,执行函数nextAjaxDataFromFirstAjax;使用下一个ajax和数据
只有在收到第一次调用的输出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");
});
如果仅在第一次调用成功时才需要进行第二次调用,请使用jqXHR.donefunction{}。强大是什么意思?这都是必要的。done接收到与之相同的参数。donefunction{}与函数{}完全相同,为null,不是吗?@MarcosLima:但它返回其他东西。仔细看看我的答案。@Bergi:谢谢你的帮助。我试过你的方法。但是在从第二次调用返回承诺之后,我将在FunctionData中获得第一次调用的输出。我不是在传递第一个数据。您可以使用这个链接@user2766829查看示例:您确定您使用了then not done吗?我确信第二次回调中的数据是第二次ajax调用的结果,或者如果第一次回调没有返回任何内容,则为未定义。你能做一个演示来展示那些不工作的代码吗?编辑:感谢您的帮助,但不幸的是,这会引发运行时异常。