jQuery 1.4.4 和 1.7.2 之间的 .ajax() 发生了什么导致代码中断

What happened to .ajax() between jQuery 1.4.4 and 1.7.2 to make code break?

本文关键字:什么 发生了 代码 中断 ajax 之间 jQuery      更新时间:2023-09-26

我需要在当前使用1.4.4的站点上迁移到jQuery 1.7.2。 我有下面的 ajax 调用,它在 1.4.4 中工作正常,但正在回踢

没有从文本到 [对象] 的转换

在 1.7.2 中。 (我认为这与.parseJSON()有关,但我不确定。

function ajax_update(table_value, key_value, value_value, newkey_value, newvalue_value, debug) {
$.ajax({
    type: "POST",
    url: "/index.php/ajax/updatepost/",
    data: { 
        table: table_value,
        key: key_value,
        value: value_value,
        newkey: newkey_value,
        newvalue: newvalue_value
    },
    dataType: JSON,
    success: function(data, textStatus){
        var result = jQuery.parseJSON(data);
        //both debug and flash going in two different directions
        $("div#flash > p").text(result.message);
        $("div#flash").removeClass().addClass("message").addClass(result.flavor).slideDown(500).delay(1200).slideUp(500);
        if (debug == true) {
            $("div#debugflash > p").text(result.debug);
            $("div#debugflash").removeClass().addClass("message").addClass("information").show();
        }
    },
    error: function(errorObj, textStatus, errorThrown){
        $("div#flash > p").text(errorThrown);
        $("div#flash").removeClass().addClass("message").addClass("error").slideDown(500).delay(1200).slideUp(500);
        if (debug == true) {
            $("div#debugflash > p").text(errorThrown);
            $("div#debugflash").removeClass().addClass("message").addClass("information").show();
        }
    }
});

}

json 在 jsonlint.com 中验证,由调用 json_encode(array) 的 php 脚本生成,如下所示:

{"message":"Updated field name with value ALAMO",
"flavor":"success",
"debug":"UPDATE `customers` SET `name` = 'ALAMO' WHERE `cust_id` = 'ALA100'"

}

头:

HTTP/1.1 200 OK
Date: Tue, 01 May 2012 00:00:15 GMT
Server: Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/0.9.8r DAV/2 PHP/5.3.8 with Suhosin-Patch
X-Powered-By: PHP/5.3.8
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
MS-Author-Via: DAV
Content-Length: 177
Keep-Alive: timeout=15, max=96
Connection: Keep-Alive
Content-Type: application/json

任何帮助都非常感谢。

我认为这与这条线有关

dataType: JSON

试试这个

dataType: 'json'

jQuery 1.5 重写了 AJAX,使其更具可扩展性。 请参阅 http://encosia.com/jquery-1-5s-ajax-rewrite-and-asp-net-services-all-is-well/传递到成功函数的数据可能已经JSON.parse()编辑。

我认为您的错误可能与这一行有关:

        var result = jQuery.parseJSON(data);

尝试使用

alert(data);

以确保数据变量包含数据。