Почему jquery не превращает мой массив в строку json перед отправкой в ​​веб-метод asp.net? - PullRequest
8 голосов
/ 01 ноября 2008

До сих пор я только передавал строки javascript моим веб-методам, которые анализируются, как правило, как Guids. но теперь у меня есть метод, который принимает 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 ]

10 голосов
/ 01 ноября 2008

data: "{'backerEntries':" + backerEntries + "}",

.. совпадает с

data: "{'backerEntries':" + backerEntries.toString() + "}",

... что в значительной степени бесполезно. Используйте предложение Duncan , если вы просто хотите передать закодированный список значений с именем "backerEntries" в строке запроса. Если вы хотите JSON-кодировать данные, то получите библиотеку JSON и вызовите JSON.stringify().

4 голосов
/ 01 ноября 2008

Данные, которые вы передаете, вы уже пытаетесь передать как строку. Если вы хотите, чтобы jQuery трансформировал его, оставьте все это как объект, например,

data:{backerEntries: backerEntries }

Предполагается, что backerEntries - это массив. jQuery должен преобразовать это и добавить его в строку запроса, так как это поведение по умолчанию. Ваш текущий код использует поведение JavaScript по умолчанию, которое по умолчанию не преобразует массив в его строковое представление.

2 голосов
/ 01 ноября 2008

Поскольку вы используете ASP.NET, вы можете использовать встроенную библиотеку сериализации ASP.NET AJAX:

var backerEntriesJson = Sys.Serialization.JavaScriptSerializer.serialize(backerEntries);

затем передайте это прямо в ваш jjuery-вызов ajax:

...
data: backerEntriesJson,
...
0 голосов
/ 15 августа 2009

Это НЕ действительно JSON: {'foo': 'bar'}

Нет, не было никогда, никогда не будет. Процессоры JSON часто очень просты, что, конечно, ложное удобство.

Прочитайте спецификацию. Строка определяется как заключенная в двойные кавычки, а не в одинарные кавычки, не символы смайликов, не куски металла, согнутые под прямым углом, а не кирпичи. Там нет упоминания одиночных кавычек, точка.

Теперь имена свойств являются строками JSON. По определению они ДОЛЖНЫ быть заключены в двойные кавычки.

Действительный: {"foo": "bar"} действительный "{" foo ": 100} valid: {"foo": true} действительный: {"foo": ["one", "two"], "bar": false}

см. Www.json.org

см. Www.jsonlint.com

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