C#与jQuery异步交换数据的整的要死的两个小问题
/* C#与jQuery异步交换数据的整的要死的两个小问题
C#代码
--------------------------------------------------
string jsonArr = "[";
foreach (LT.Model.foodCategory objCt in objList) {
jsonArr += string.Format("{{\"cID\":\"{0}\",\"cName\":\"{1}\",\"isOpen\":\"{2}\"}},", objCt.cID, objCt.cName, objCt.isOpen);
}
return jsonArr.TrimEnd(',') + "]";
---------------------------------------------------
C#中string.Format方法内部通过正则RegExp('\\{' + (i-1) + '\\}','gm')来解析"{}",
但是json自身有个"{}",所以在外面在套个"{}"就OK了,嘿嘿~
C#代码
--------------------------------------------------
string jsonArr = "[";
foreach (LT.Model.foodCategory objCt in objList) {
jsonArr += string.Format("{{cID:‘{0}’,cName:‘{1}’,isOpen:‘{2}’}},", objCt.cID, objCt.cName, objCt.isOpen);
}
return jsonArr.TrimEnd(',') + "]";
---------------------------------------------------
刚开始是这么写的,不是{{\"cID\":\"{0}\",\"cName\":\"{1}\",\"isOpen\":\"{2}\"}},
是这么写的{{cID:‘{0}’,cName:‘{1}’,isOpen:‘{2}’}}
结果$.ajax的success方法返回不出来这串string
原因是$.ajax传入的一个参数dataType:json,
改成text就能出来,不过是string,不是json,还要自己处理,不是我要的
是json的时候 $.ajax执行了
parseJSON: function (data) {
if (typeof data !== "string" || !data) {
return null;
}
// Make sure leading/trailing whitespace is removed (IE can't handle it) data = jQuery.trim(data);
// Make sure the incoming data is actual JSON
// Logic borrowed from http://json.org/json2.js
if (/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") .replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) { >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>false
// 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);
}
},
这个方法,是单引号的时候过不了那段正则的
得写成转义符号就能过那段正则,并通过window.JSON.parse(data) 执行
eval(data),把string转化成json。
其实改成{‘cID’:‘{0}’,‘cName’:‘{1}’,‘isOpen’:‘{2}’}
key加上引号,不用转义符能通过正则的验证,不过返回的是string,不是json
*/