我正在尝试检索有关任何给定网页(即页面和域的页面)的一些信息,然后使用检索到的信息进行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上取得任何成功?
答案 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调用链。