Передача объекта js как json в jquery? - PullRequest
12 голосов
/ 02 июня 2009

У меня есть следующее, но оно не работает, я где-то читал в стеке потока, что он работает так, но я не могу заставить его работать ... это ошибки ... я что-то делаю не так?

Если я передаю данные вот так - это работает - поэтому я знаю, что мой сервис работает

//THIS WORKS
data: "{one : 'test',two: 'test2' }"


// BUT SETTING UP OBJECT doesn't work..

var saveData = {};
saveData.one = "test";
saveData.two = "tes2";


$.ajax({
    type: "POST",
    url: "MyService.aspx/GetDate",
    data: saveData,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        alert(msg.d);
    },
    error: function(msg) {
    alert('error');
    }

});

Ответы [ 3 ]

25 голосов
/ 02 июня 2009

Я полагаю, что код вызовет .value или .toString () для вашего объекта и затем передаст по проводам. Вы хотите передать JSON.

Итак, включите библиотеку json javascript

http://www.json.org/js.html

А потом передать ...

    var saveData = {};
    saveData.one = "test";
    saveData.two = "tes2";


    $.ajax({
        type: "POST",
        url: "MyService.aspx/GetDate",
        data: JSON.stringify(saveData),      // NOTE CHANGE HERE
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            alert(msg.d);
        },
        error: function(msg) {
        alert('error');
        }

    });
4 голосов
/ 02 июня 2009

Согласно этой записи в блоге , причина, по которой он не работает при попытке передать объект, заключается в том, что jQuery пытается его сериализовать. Из поста:

Вместо передачи этого объекта JSON в веб-сервис, jQuery автоматически сериализует и отправляет его как:

fname=dave&lname=ward

На что сервер ответит:

Invalid JSON primitive: fname.

Это явно не то, что мы хотим, чтобы произошло. Решение состоит в том, чтобы убедиться, что вы передаете jQuery строку для параметра данных [...]

Что вы делаете в примере, который работает.

3 голосов
/ 02 июня 2009

Я бы предложил использовать плагин jquery-json , и тогда вы можете просто сделать это в своем коде:

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