成功的问题

时间:2011-08-08 03:54:58

标签: jquery ajax

也许我对这个问题有所了解,但我对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有什么问题?

3 个答案:

答案 0 :(得分:3)

也许您的服务器没有返回JSON数据。通常,您可以通过检查Content-Type标头以及可能的其他方法,将其保留到$.ajax以确定服务器响应的数据类型。尝试删除dataType

另外,使用:

success: alert('problem!')

获取你的alert,因为这将在$.ajax调用的选项对象构建时执行,并且根本不会有成功的回调。

答案 1 :(得分:2)

您忽略了文档化代码中最重要的方面:

context: document.body,

context建议,指定回调的上下文 - successerrorcomplete

因此,在文档代码的成功块中,$(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");
        }

    ...

}