Почему jquery не превращает мой массив в строку json перед отправкой в asp.net веб-метод?
до сих пор я передавал строки javascript только своим веб-методам, которые анализируются, как правило, как GUID. но теперь у меня есть метод, который принимает IList... на клиенте я создаю этот массив объектов, а затем пытаются передать его как:
$.ajax({
type: 'POST',
url: 'personalization.aspx/SetPersonalization',
data: "{'backerEntries':" + backerEntries + "}",
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: postcardManager.SetPersonalizationComplete
});
должность:
{'backerEntries':[object Object],[object Object],[object Object]}
ответ об ошибке:
Invalid JSON primitive: object.
по какой-то причине jquery не преобразует мой массив в строку json? Есть идеи почему? Я попытался положить [] вокруг backerEntries, и {}, а также {[]} просто в полном отчаянии. Я упускаю что-то очевидное?
4 ответов
data: "{'backerEntries': "+ backerEntries +"}",
..это то же самое, что
data: "{'backerEntries':" + backerEntries.toString() + "}",
...что практически бесполезно. Использовать Дунканпредложение, если вы просто хотите передать закодированный список значений с именем "backerEntries" в строке запроса. Если вы хотите JSON-кодировать данные, то получите библиотека JSON и звонок JSON.stringify()
.
данные, которые вы передаете, вы уже пытаетесь передать их как строку. Если вы хотите, чтобы jQuery преобразовал его, оставьте все это как объект, например
data:{backerEntries: backerEntries }
предполагая, конечно, что backerEntries является массивом. jQuery должен преобразовать это и добавит его к querystring, поскольку это его поведение по умолчанию. Ваш текущий код полагается на поведение JavaScript по умолчанию, которое по умолчанию не преобразует массив в его строковое представление.
Так как вы используете ASP.NET, вы можете использовать встроенный ASP.NET библиотека сериализации AJAX:
var backerEntriesJson = Sys.Serialization.JavaScriptSerializer.serialize(backerEntries);
затем передайте это непосредственно в вызове jQuery ajax:
...
data: backerEntriesJson,
...
Это недопустимо JSON: {'foo': 'bar'}
Нет, никогда не было, никогда не будет. Процессоры JSON часто очень прощают, что, конечно, является ложным удобством.
читать спецификацию. Строка определяется как заключенная в двойные кавычки, а не одинарные кавычки, не смайлики, не куски металла, изогнутые под прямым углом, не кирпичи. Там нет упоминания о одинарных кавычках, точка.
теперь имена свойств являются строками JSON. По определению, они должны быть заключены в двойные кавычки.
действительно: {"foo": "bar" } действительно " {"foo": 100 } действительно: {"foo": true } valid: {"foo": ["one", "two"], "bar": false }
см www.json.org
см www.jsonlint.com