2010-01-25 61 views
2

我有一个函数将数据提交给我的服务器,然后删除编辑UI并用常规UI替换它。这在JQuery 1.3.2下完美工作,但不适用于JQuery 1.4.0。有任何想法吗?显示/隐藏使用JQuery 1.3.2但不使用JQuery 1.4

function save_edit(point_id) { 
    var data = {}; 
    data.id = point_id; 
    $.post("/foo", data, function(responseData) { 
    $("#value" + point_id).show(); 
    $("#editval" + point_id).hide(); 
    }, "json"); 
} 

回答

7

jQuery 1.4对于有效的JSON响应文本非常挑剔。以下是无效的JSON(和最有可能您的问题)

{foo:'bar'} 

// Strict JSON requires quoted attributes - and the quotes must be doubles! 

{"foo": "bar"} 

This blog post提及使用“文本”,而不是如果你不能修复服务器端JSON容易解决方法。适用于你的函数你:

function save_edit(point_id) { 
    var data = {}; 
    data.id = point_id; 
    $.post("/foo", data, function(responseText) { 
    var responseData = eval("("+responseText+")"); 
    $("#value" + point_id).show(); 
    $("#editval" + point_id).hide(); 
    }, "text"); 
} 

此外,你将能够处理错误的情况下做这样的事情:

function save_edit(point_id) { 
    var data = {}; 
    data.id = point_id; 
    var $edit = $("#editval"+point_id); 
    var $view = $("#value"+point_id); 
    $.ajax({ 
    method: "POST", 
    url: "/foo", 
    data: data, 
    success: function(responseData) { 
     $view.show(); 
     $edit.hide().find('.error').remove(); 
    }, 
    error: function(XHR, textStatus, errorThrown) { 
     var $err = $edit.find(".error"); 
     if ($err.length == 0) { $err = $("<div class='error'/>").appendTo($edit); } 
     $err.text("Error: "+textStatus); 
    } 
    }); 
} 
+0

jQuery的1.4是非常严格的,但是jResig提供了一个插件,如果你想运行1.4并仍然提供1.3.2兼容性 - 链接:http://github.com/jquery/jquery-compat-1.3 – MJJames 2010-01-25 23:26:19

+0

我的问题是,服务器使用单引号(')而不是双引号(“) 。它返回的形式是{'foo':'bar'}而不是{“foo”:“bar”}。一旦我解决了这个问题,javascript就可以工作了。 – eggplant 2010-01-26 03:09:49

0

jQuery 1.4使用严格的JSON解析,如release notes中所述。您的数据是否有效JSON?