jQuery Ajax请求内部的Ajax请求

80

在另一个ajax请求中发出ajax请求是否可能? 因为我需要第一个ajax请求中的一些数据来进行下一个ajax请求。

首先我使用Google Maps API获取LAT和LNG,然后使用这些LAT和LNG请求Instagram API(基于位置搜索)。

如果可能的话,如何实现呢?

$('input#search').click(function(e) {
    e.preventDefault();
    var source = $('select[name=state] option:selected').text()+' '+$('select[name=city] option:selected').text()+' '+$('select[name=area] option:selected').text();
    var source = source.replace(/ /g, '+');
    if(working == false) {
        working = true;
        $(this).replaceWith('<span id="big_loading"></span>');
        $.ajax({
            type:'POST',
            url:'/killtime_local/ajax/location/maps.json',
            dataType:'json',
            cache: false,
            data:'via=ajax&address='+source,
            success:function(results) {
            // this is where i get the latlng
            }
        });
    } else {
        alert('please, be patient!');
    }
});

7
可以的。 - Ved
1
你能把你目前的代码发出来吗? - Rory McCrossan
我已经编辑了我的问题,代码在上面。 - Bias Tegaralaga
4个回答

107

这里是一个例子:

$.ajax({
    type: "post",
    url: "ajax/example.php",
    data: 'page=' + btn_page,
    success: function (data) {
        var a = data; // This line shows error.
        $.ajax({
            type: "post",
            url: "example.php",
            data: 'page=' + a,
            success: function (data) {
   
            }
        });
    }
});

1
你确定这是最佳实践吗?我的朋友认为我应该使用一个标志变量,并在 setInterval 函数外部检查它。 - whamsicore
1
这也可能是一个解决方案,但这需要更少的努力和更容易。 - Tariq
6
我无法表达这个答案对我有多大帮助,因为它帮助我在尝试进行一个“成功”的“获取”后发布内容。 - Bruce
这个答案语法上不正确,对吧?它只有两个闭合花括号。 - Menuka Ishan
1
我点赞了这个,但是应该在.done或.complete函数中完成,以确保第一个请求已经完成了吗? - Daniel
2
@Daniel 当 Ajax 得到 200 OK 时,success 函数才会运行,这确保了第一个请求返回了一些(希望是可用的)内容,但使用 done 也是一个不错的方法,而无需嵌套。在这里查看更多信息。 - M. Davis

28

在'complete'时调用第二个Ajax请求。

以下是示例:

   var dt='';
   $.ajax({
    type: "post",
    url: "ajax/example.php",
    data: 'page='+btn_page,
    success: function(data){
        dt=data;
        /*Do something*/
    },
    complete:function(){
        $.ajax({
           var a=dt; // This line shows error.
           type: "post",
           url: "example.php",
           data: 'page='+a,
           success: function(data){
              /*do some thing in second function*/
           },
       });
    }
});

3
非常感谢,你的回答帮了我大忙 嘿嘿嘿 - GuiPab

4
这只是一个示例。您可能希望根据自己的需求进行自定义。
 $.ajax({
      url: 'ajax/test1.html',
      success: function(data1) {
        alert('Request 1 was performed.');
        $.ajax({
            type: 'POST',
            url: url,
            data: data1, //pass data1 to second request
            success: successHandler, // handler if second request succeeds 
            dataType: dataType
        });
    }
});

更多细节请参见:查看此处

0
$.ajax({
    url: "<?php echo site_url('upToWeb/ajax_edit/')?>/" + id,
    type: "GET",
    dataType: "JSON",
    success: function (data) {
        if (data.web == 0) {
            if (confirm('Data product upToWeb ?')) {
                $.ajax({
                    url: "<?php echo site_url('upToWeb/set_web/')?>/" + data.id_item,
                    type: "post",
                    dataType: "json",
                    data: {web: 1},
                    success: function (respons) {
                        location.href = location.pathname;
                    },
                    error: function (xhr, ajaxOptions, thrownError) { // Ketika terjadi error
                        alert(xhr.responseText); // munculkan alert
                    }
                });
            }
        }
        else {
            if (confirm('Data product DownFromWeb ?')) {
                $.ajax({
                    url: "<?php echo site_url('upToWeb/set_web/')?>/" + data.id_item,
                    type: "post",
                    dataType: "json",
                    data: {web: 0},
                    success: function (respons) {
                        location.href = location.pathname;
                    },
                    error: function (xhr, ajaxOptions, thrownError) { // Ketika terjadi error
                        alert(xhr.responseText); // munculkan alert
                    }
                });
            }
        }
    },

    error: function (jqXHR, textStatus, errorThrown) {
        alert('Error get data from ajax');
    }

});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接