专题 jquery
当前位置:首页 > 网站建设专题 > JQuery
ajaxSubmit插件jQuery1.4.2版JSON问题
发布日期:2010-09-02 阅读次数:3091 字体大小:

jQuery Form 插件基于jQuery v1.4.2版返回JSON数据时一直报错;修改以下内容可恢复;

原后台输出数据格式如:{sitename:'开发者网络',siteurl:'www.AAA.net',level:10} 需改为 {"sitename":"开发者网络","siteurl":"www.AAA.net","level":10}

也就是在名称需以双引号包括;因为 jQuery 1.4.2版在 parseJSON 方法中添加了正则判断

 

if ( /^\,:{}\s*$/.test(data.replace(/\\(?:"\\\/bfnrt|u0-9a-fA-F{4})/g, "@")
   .replace(/"^"
\\\n\r*"|true|false|null|-?\d+(?:\.\d*)?(?:eE+\-?\d+)?/g, "")
   .replace(/(?:^|:|,)(?:\s*\)+/g, "")) ) {

   // Try to use the native JSON parser first
   return window.JSON && window.JSON.parse ?
    window.JSON.parse( data ) :
    (new Function("return " + data))();

  } else {
   jQuery.error( "Invalid JSON: " + data );
  }

 

jQuery Form 插件需要修改的地方

 

if (scr || s.textarea) {
     // see if user embedded response in textarea
     var ta = doc.getElementsByTagName('textarea')0;
     if (ta) {
      xhr.responseText = ta.value;
     }
     else if (scr) {
      // account for browsers injecting pre around json response
      var pre = doc.getElementsByTagName('pre')0;
      if (pre) {
       xhr.responseText = pre.innerHTML;
      }
     }    
    }
    else if (s.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
     xhr.responseXML = toXml(xhr.responseText);
    }

 

修改为:

 

if (scr || s.textarea) {
     // see if user embedded response in textarea
     var ta = doc.getElementsByTagName('textarea')0;
     if (ta) {
      xhr.responseText = ta.value;
     }
     else if (scr) {
      // account for browsers injecting pre around json response
      var pre = doc.getElementsByTagName('pre')0;
      if (pre) {
       xhr.responseText = pre.innerHTML;
      }else xhr.responseText=doc.body.innerHTML;
     }    
    }
    else if (s.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
     xhr.responseXML = toXml(xhr.responseText);
    }

 

原文地址:http://www.vifo.net/Program/JavaScript/10090191.shtml

感谢 鸽子 的投稿