Jquery 根据另一个ajax请求的输出生成ajax请求

Jquery 根据另一个ajax请求的输出生成ajax请求,jquery,ajax,promise,jquery-deferred,Jquery,Ajax,Promise,Jquery Deferred,我现在要做的是,每当用户单击按钮时,我都会进行jqueryajax调用,如果我从这个调用中得到一个特定的输出,比如12345,那么我需要进行另一个ajax调用。通过在成功回调中进行第二次ajax调用,我可以很容易地做到这一点,但我认为这不是一种很好的完成事情的方法。 所以我尝试了不同的方法来实现这一点。但问题是,我的两个ajax调用并不相互依赖。我的意思是,我不需要将数据从ajax1传递到ajax2。只有在收到第一次调用的输出12345时,我才需要进行第二次ajax调用。所以我所做的是 var

我现在要做的是,每当用户单击按钮时,我都会进行jqueryajax调用,如果我从这个调用中得到一个特定的输出,比如12345,那么我需要进行另一个ajax调用。通过在成功回调中进行第二次ajax调用,我可以很容易地做到这一点,但我认为这不是一种很好的完成事情的方法。 所以我尝试了不同的方法来实现这一点。但问题是,我的两个ajax调用并不相互依赖。我的意思是,我不需要将数据从ajax1传递到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延迟对象和承诺。我现在正在浏览文档。我感谢所有的帮助

    $(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调用的结果,或者如果第一次回调没有返回任何内容,则为未定义。你能做一个演示来展示那些不工作的代码吗?编辑:感谢您的帮助,但不幸的是,这会引发运行时异常。