也许我对这个问题有所了解,但我对success
有疑问,我真的看不到jQuery文档中使用success
的例子之间存在差异:
$.ajax({
url: "test.html",
context: document.body,
success: function(){
$(this).addClass("done");
}
});
和我的代码:
$('#my_form').live('submit', function(){
var data = $("#form_for_item").serialize();
var url = '/something/add_something/' + $('#form_for_item').attr('name') + '/';
$.ajax({
type: 'POST',
url: url,
data: data,
success: function(){
alert('problem!')
},
dataType: 'json'
});
return false;
});
对于更多我可以说数据是通过邮寄发送并保存在我的数据库中,而且我可以说当我success: alert('problem!')
时没有问题。
我的success
有什么问题?
答案 0 :(得分:3)
也许您的服务器没有返回JSON数据。通常,您可以通过检查Content-Type标头以及可能的其他方法,将其保留到$.ajax
以确定服务器响应的数据类型。尝试删除dataType
。
另外,使用:
success: alert('problem!')
获取你的alert
,因为这将在$.ajax
调用的选项对象构建时执行,并且根本不会有成功的回调。
答案 1 :(得分:2)
您忽略了文档化代码中最重要的方面:
context: document.body,
context
建议,指定回调的上下文 - success
,error
,complete
。
因此,在文档代码的成功块中,$(this)
表示$(document.body)
。
默认情况下,上下文$.ajaxSettings
与传递给.ajax()
的设置合并而不是DOM对象。
另一个问题我看到您的代码是:
var url = '/something/add_something/' + $('#form_for_item').attr('name') + '/';
您正在使用绝对网址(由于缺少FQDN而无法解析)导致错误,因此您的成功永远不会执行。 要验证,请添加错误处理程序并查看。
理想情况下,您的网址应该是:
// relative path
var url = 'something/add_something/' + $('#form_for_item').attr('name') + '/';
或
// complete path
var url = 'http://domain.com/something/add_something/' + $('#form_for_item').attr('name') + '/';
答案 2 :(得分:1)
问题是,在this
回调中,{AJ}回调中的this
完全不是.live
,因为this
会根据上下文动态变化。要获得正确的对象,您需要保存对它的引用:
.live('submit', function () {
var that = this;
...
success : function () {
$(that).addClass("done");
}
...
}