链式Jquery Ajax调用

时间:2010-11-09 21:52:03

标签: javascript ajax jquery

我正在尝试检索有关任何给定网页(即页面和域的页面)的一些信息,然后使用检索到的信息进行jquery异步POST。不幸的是,javascript执行到达$ .post(),但从未发出实际的Web请求。这是我的代码:

$.get('../embed', {u: url}, function(html) {
    alert('got "' + html + '"');
    $.post('/media/add', { story: storyid, caption: caption, type: 5, title: title, content: html, meta: meta }, function(data) {
        var obj = jQuery.parseJSON(data); 
        var thumb = imageUrlFromMedia(obj);
        var clip = addToClipboard(obj.id, thumb || '/img/icons/embedly.png', obj.name);
    });
});

甚至可以在$ .get()的成功处理程序中进行另一个ajax调用吗?以前有没有人在多个链式HttpRequests上取得任何成功?

2 个答案:

答案 0 :(得分:0)

您可以使用$ .ajax查找XML HTTP请求或JSON解析中的错误(遗憾的是,可能无法用于JSON解析)。即使它无法解析,它仍应显示为文本。无论如何,要将失败消息重构为如此

$.ajax({
  url: '../embed',
  data: {u: url},
  success: function(html){
    ..
     $.post
    ..
  },
  error: function(XMLHTTPRequest, textStatus, errorThrown){
     //Danger Will Robinson
  }
});

如果您没有看到第二个请求,则这是失败的请求。如果仍然没有找到错误,请尝试对$ .post执行相同的操作。您应该考虑将$ .post重构为$ .ajax。顺便说一句,如果你使用$ .getJSON而不是$ .post,parseJSON是自动的。这类似于$ .ajax中的dataType:'json'。

答案 1 :(得分:0)

这可以使用带有$ .Deferred()类的本机(无插件)jQuery来完成。

最常见的是使用$ .when()。then()(参见:http://api.jquery.com/jQuery.when/)或使用$ .pipe()使用更复杂的序列(参见:http://api.jquery.com/deferred.pipe/)。< / p>

这里有一个例子,使用$ .pipe():http://charliedigital.com/2011/07/15/chaining-jquery-ajax-calls/

对于最简单的情况,我建议使用when-then。对于更复杂的情况,您需要使用管道来构建更大的AJAX调用链。