2009-06-01 2 views
9

У меня есть следующее, но оно не работает, я где-то читал в стеке, что он работает так, но я не могу заставить его работать. Это ошибки ... Я делаю что-то неправильно?Передача js объекта как json для jquery?

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

//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'); 
    } 

}); 
+0

Что такое ошибка? – cgp

+0

Как отмечалось в ответе Мэтта Уинклера, проблема заключается не в обработке jQuery объекта, который вы ему даете (это и есть ожидаемая вещь), но, по-видимому, службы .NET ожидают, что JSON будет строкой, которая затем может анализировать серверную сторону , В том числе библиотека для строгой цели создания объекта в этом случае не нужна. –

+0

Существует не так много вреда, включая ~ 2kb (до gzip) json2.js в вашем комплекте JavaScript. Поддержка встроенного браузера в браузерах, таких как Firefox 3.5, имитирует методы в json2.js, поэтому использование его API является хорошей практикой для будущего. –

ответ

21

Я считаю, что код будет вызывать .Value или .ToString() на ваш объект, а затем пройдите через провод. Вы хотите передать JSON.

Так, включите JavaScript формата JSON библиотека

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'); 
     } 

    }); 
+0

спасибо .. это сработало отлично .... спасибо .. –

+0

или $ .param (saveData) – Plattsy

3

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

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

fname=dave&lname=ward 

которому сервер ответит:

Invalid JSON primitive: fname. 

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

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

3

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

... 
data: $.toJSON(saveData), 
... 
Смежные вопросы