JQuery getJSON在包含Apostrophe的SharePoint REST数据上失败

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)

还有其他人遇到过这样的事吗?

Sco*_*ice 7

经过进一步调查,我认为我发现了问题.我创建了一个简单的列表,其中包含一个带有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)