Sco*_*ice 6 jquery sharepoint-2010
我正在使用JQuery的getJSON函数来调用SharePoint 2010中可用的REST服务.除非SharePoint数据包含撇号,否则一切似乎都能正常工作.当数据包含撇号时,getJSON调用中的回调将不会执行.
在从SharePoint返回的数据中,撇号似乎使用"\"进行转义.单引号和其他字符似乎不会产生问题.
$(document).ready(function () {
$.getJSON(
"http://<server>/<site>/_vti_bin/listdata.svc/Tasks", null,
function (data) {
alert("Function called");
});
});
Run Code Online (Sandbox Code Playgroud)
还有其他人遇到过这样的事吗?
经过进一步调查,我认为我发现了问题.我创建了一个简单的列表,其中包含一个带有Test'的项目作为title字段的值.最后的撇号说明了问题.SharePoint似乎在返回的JSON值中转义撇号:
{"d":{"results":[{"_ _ metaadata":{"uri":"http:////_vti_bin/listdata.svc/JSONTest(1)","etag":"W/\"2 \"","类型":"Microsoft.SharePoint.DataService.JSONTestItem"},"Id":1,"ContentTypeID":"0x0100AC5DC67105487A4B87E86D93A3276612","ContentType":"Item","Title":"Test \'","修改":"\ /日期(1292244302000)\ /","创建":"\ /日期(1292244205000)\ /","CreatedBy":{"_ _ deferred":{"uri":"http:// //_vti_bin/listdata.svc/JSONTest(1)/CreatedBy"}...
根据JSON规范,撇号似乎不是以JSON格式转义的有效字符:
RFC 4627 JSON 2006年7月
字符串的表示类似于C系列编程语言中使用的约定.字符串以引号开头和结尾.除了必须转义的字符外,所有Unicode字符都可以放在引号内:引号,反向实线和控制字符(U + 0000到U + 001F)
使用ajaxError函数我确实收到一条消息,告诉JSON无效.
要处理这种情况,您可以执行以下操作.我使用JQuery模板插件(tmpl)来格式化JSON结果.还需要一些更多的错误处理来处理进一步可能的JSON解析失败.
$.ajax({
url: "http://<server>/<site>/_vti_bin/listdata.svc/<list>",
dataType: "json",
success: function(data) {
//alert("successful");
$("#templateID").tmpl(data.d.results).appendTo("#elementID");
},
error: function(data) {
//alert("error");
var sCleanJSON = data.responseText.replace(/\\'/g,"'");
var objJSON = $.parseJSON(sCleanJSON );
$("#templateID").tmpl(objJSON.d.results).appendTo("#elementID");
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7087 次 |
| 最近记录: |