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