【发布时间】:2013-05-01 15:20:37
【问题描述】:
我遇到了一个奇怪的 ajax 回调情况。
调用 A 工作正常(我可以在正确的位置看到服务器调用),并且正确触发了 done 回调。
调用 B 调用工作正常(我可以在正确的位置看到服务器调用),但随后触发了 A 的 done 回调!
代码如下: 答:
$(document).ready(function () {
$('#beta_signup_form').submit(function() {
var valuesToSubmit = $(this).serialize();
$.ajax({
url: $(this).attr('action'), //submits it to the given url of the form
data: valuesToSubmit,
dataType: "JSON", // you want a difference between normal and ajax-calls, and json is standard
type: 'POST'
}).done(function(json){
console.log("in the beta signup form success function!!!!");
})
.fail(function () {
console.log("--------> beta signup modal callback error");
});
return false; // prevents normal behaviour
});
});
和代码 B:
$(document).ready(function () {
$('#twitter_sign_up').submit(function() {
var valuesToSubmit = $(this).serialize();
$.ajax({
url: $(this).attr('action'), //submits it to the given url of the form
data: valuesToSubmit,
dataType: "JSON", // you want a difference between normal and ajax-calls, and json is standard
type: 'POST'
}).done(function(json) {
console.log("in success for modal B...");
}).fail(function () {
console.log("--------> modal B callback error");
});
return false; // prevents normal behaviour
});
});
这是怎么回事???
【问题讨论】:
-
我从未见过这种情况。
-
你能在这里粘贴 HTML 代码吗?
-
您确定您向我们展示的代码会发生这种情况吗?因为它看起来非常好。更重要的是 - 由于它们位于不同的
$(document).ready处理程序中,因此它们不可能互相看到。 -
你应该在
submit回调中使用var valuesToSubmit = $(this).serialize(), $this = $(this);,然后在你的$.ajax调用中引用$this而不是$(this)。 -
这就是你如何用 jQuery 创建一个 ajax fiddle 让我们看看你下次在做什么DEMO
标签: javascript jquery ajax callback