show / hide适用于JQuery 1.3.2但不适用于JQuery 1.4

时间:2010-01-25 23:00:45

标签: javascript ajax jquery

我有一个向我的服务器提交数据的函数,然后删除编辑UI并将其替换为常规UI。这在JQuery 1.3.2下完美运行,但不适用于JQuery 1.4.0。有什么想法吗?

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");
}

2 个答案:

答案 0 :(得分: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,则会提及使用“text”的变通方法。适用于您的功能:

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);
    }
  });
}   

答案 1 :(得分:0)

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