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

JQuery getJSON在包含撇号的SharePoint REST数据上失败,jquery,sharepoint-2010,Jquery,Sharepoint 2010,我正在使用JQuery的getJSON函数调用SharePoint 2010中可用的REST服务。除非SharePoint数据包含撇号,否则一切似乎都正常工作。当数据包含撇号时,getJSON调用中的回调将不会执行 在从SharePoint返回的数据中,撇号似乎用“\”转义。单引号和其他字符似乎不会造成问题 $(document).ready(function () { $.getJSON( "http://<server>/<site>/_vti

我正在使用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");                
        });
});
$(文档).ready(函数(){
$.getJSON(
"http:////_vti_bin/listdata.svc/Tasks“,空,
功能(数据){
警报(“调用的函数”);
});
});

还有人遇到过类似的情况吗?

这听起来很奇怪。。。不如使用
$.get()
而不是
$.getJSON()
,然后将响应转换为正确的JSON形式,最后使用
$.parseJSON()
来获取JSON对象。

进一步调查后,我认为我发现了问题。我创建了一个简单的列表,其中有一个条目,标题字段的值是Test。结尾的撇号说明了这个问题。SharePoint似乎在返回的JSON值中转义撇号:

{ “d”:{ “结果”:[ { “_元数据”:{ “uri”:http:////_vti_bin/listdata.svc/JSONTest(1) ,“etag”:“W/\“2\”,“type”:“Microsoft.SharePoint.DataService.JSONTestItem” },“Id”:1,“ContentTypeID”:“0x0100AC5DC67105487A4B87E86D93A3276612”,“ContentType”:“项目”,“标题”:“测试\',“修改”:“\/Date(1292244302000)\/”,“Created”:“\/Date(1292244205000)\/”,“CreatedBy”:{ “推迟”:{ “uri”:http:////_vti_bin/listdata.svc/JSONTest(1) /CreatedBy“ } . .

根据JSON规范,撇号似乎不是在JSON中转义的有效字符:

RFC 4627 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");
        }           
    });
$.ajax({
url:“http:////_vti_bin/listdata.svc/",
数据类型:“json”,
成功:函数(数据){
//警报(“成功”);
$(“#templateID”).tmpl(data.d.results).appendTo(“#elementID”);
},
错误:函数(数据){
//警报(“错误”);
var sCleanJSON=data.responseText.replace(/\\'/g,“');
var objJSON=$.parseJSON(sCleanJSON);
$(“#templateID”).tmpl(objJSON.d.results).appendTo(“#elementID”);
}           
});

试试jQuery SPServices插件,非常方便且易于使用,唯一的一点是它返回XML数据。

我遇到了类似的情况。显然.NET 3.5 SP1中存在漏洞

退房
用于修复/解决方法。

感谢您的回复。在按照您的建议解析之前,我需要清理响应。+1感谢您详细说明问题。我做了一些测试,似乎证实了这一点。