JQuery getJSON завершает работу с данными SharePoint REST, содержащими Апостроф

Я использую функцию getJSON JQuery для вызова служб REST, доступных в SharePoint 2010. Кажется, все работает нормально, если данные SharePoint не содержат Апострофа. Если данные содержат Апостроф, обратный вызов в вызове getJSON не будет выполняться.

в данных, возвращаемых из SharePoint, апострофы, по-видимому, экранируются с помощью"". Одинарные кавычки и другие символы, похоже, не создают проблемы.

$(document).ready(function () {
    $.getJSON(
        "http://<server>/<site>/_vti_bin/listdata.svc/Tasks", null,
        function (data) {
            alert("Function called");                
        });
});

кто-нибудь еще сталкивались с чем-то подобным?

4 ответов


при дальнейшем исследовании, я думаю, что нашел проблему. Я создал простой список с одним элементом с тест' как значение для поля заголовка. Апостроф в конце иллюстрирует проблему. SharePoint, похоже, избегает Апострофа в возвращаемом значении JSON:

{ "д" : { "результаты": [ { "__метаданные": { "Ури": "http:////_vti_bin/listdata.svc/JSONTest (1)", "etag": "W / \" 2\"", " тип": "Microsoft.служба SharePoint.Датасервис.JSONTestItem" }, "Id": 1, "ContentTypeID": "0x0100AC5DC67105487A4B87E86D93A3276612", "ContentType": "Item", "Title":"\тест'", "Модифицированные": "\/Дата(1292244302000)\/", "Создал": "\/Дата(1292244205000)\/", "Кем Создано": { "__отложенный": { "Ури": "http:////_vti_bin/listdata.svc/JSONTest (1) / CreatedBy" } . . .

похоже, что Апостроф не является допустимым символом для escape в JSON для JSON spec:

RFC 4627 JSON июль 2006

представление строк аналогично соглашениям, используемым в 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");
        }           
    });

Это звучит странно... Как насчет использования $.get() вместо $.getJSON(), затем массируйте ответ в правильную форму JSON и, наконец, используйте $.parseJSON() чтобы получить объект JSON.


попробуйте плагин jQuery SPServices, очень удобный и простой в использовании, единственное, что он возвращает XML-данные.


Я столкнулся с аналогичной ситуацией. По-видимому, ошибка в .NET 3.5 SP1...

проверить http://charliedigital.com/2011/07/25/jquery-parsererror-and-wcf-data-services/ для исправления / обходного пути.