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/ для исправления / обходного пути.