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

时间:2010-12-13 13:27:49

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

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

4 个答案:

答案 0 :(得分:7)

经过进一步调查,我认为我发现了这个问题。我创建了一个包含单个项目的简单列表,其中 Test'作为title字段的值。最后的撇号说明了这个问题。 SharePoint似乎在返回的JSON值中转义了撇号:

  

{   “d”:{   “结果”:[   {   “__metadata”:{   “uri”:“http:////_vti_bin/listdata.svc/JSONTest(1)”,“etag”:“W / \”2 \“”,“type”:“Microsoft.SharePoint.DataService.JSONTestItem”   },“Id”:1,“ContentTypeID”:“0x0100AC5DC67105487A4B87E86D93A3276612”,“ContentType”:“Item”,“Title”:“Test \'”,“Modified”:“\ / Date( 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");
        }           
    });

答案 1 :(得分:2)

这听起来很奇怪......如何使用$.get()代替$.getJSON(),然后将响应按到适当的JSON格式,最后使用$.parseJSON()来获取JSON对象。

答案 2 :(得分:0)

尝试jQuery SPServices插件,非常方便易用,唯一的就是返回XML数据。

答案 3 :(得分:0)

我遇到了类似的情况。显然是.NET 3.5 SP1中的错误......

结帐http://charliedigital.com/2011/07/25/jquery-parsererror-and-wcf-data-services/ 用于修复/解决方法。