JQuery getJSON завершается ошибкой в ​​данных SharePoint REST, содержащих апостроф - PullRequest
6 голосов
/ 13 декабря 2010

Я использую функцию JJuery getJSON для вызова служб 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 ]

7 голосов
/ 13 декабря 2010

После дальнейшего расследования, я думаю, что нашел проблему. Я создал простой список с одним элементом с Test ' в качестве значения для поля заголовка. Апостроф в конце иллюстрирует проблему. Похоже, что 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) \ / "," Создано ": { "__deferred": { "uri": "http: ////_vti_bin/listdata.svc/JSONTest (1) / CreatedBy" } , , .

Похоже, что апостроф не является допустимым символом для перехода в JSON согласно спецификации JSON:

RFC 4627 JSON, июль 2006 г.

Представление строк аналогично соглашениям, используемым в C семейство языков программирования. Строка начинается и заканчивается кавычки. Все символы Юникода могут быть помещены в кавычки за исключением символов, которые должны быть экранированы: кавычка, обратный солидус и управляющие символы (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");
        }           
    });
2 голосов
/ 13 декабря 2010

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

0 голосов
/ 25 мая 2012

Я столкнулся с похожей ситуацией. Видимо ошибка в .NET 3.5 SP1 ...

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

0 голосов
/ 24 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...