Опубликовать объект как данные с помощью Jquery Ajax

Мой код, который я пробовал, выглядит следующим образом:

var dataO = new Object();
dataO.numberId = 1;
dataO.companyId = 531;

$.ajax({
 type: "POST",
 url: "TelephoneNumbers.aspx/DeleteNumber",
 data: "{numberId:1,companyId:531}",
 contentType: "application/json; charset=utf-8",
 dataType: "json",
 success: function(msg) {
 alert('In Ajax');
 }
});

Я хотел бы передать объект dataO как данные ajax, как я могу это сделать?

Ответы

Ответ 1

Я оставлю свой первоначальный ответ на месте, но ниже показано, как вам нужно подходить к нему. (Простите меня, но я долгое время использовал обычные asp.net/веб-службы с jquery:)

Вам необходимо использовать следующую библиотеку js lib json2, затем вы можете использовать метод stringify, чтобы убедиться, что ваш json находится в правильном формат для службы.

var data0 = {numberId: "1", companyId : "531"};

var json = JSON2.stringify(data0 ); 

$.ajax({
 type: "POST",
 url: "TelephoneNumbers.aspx/DeleteNumber",
 data: json,
 contentType: "application/json; charset=utf-8",
 dataType: "json",
 success: function(msg) {
 alert('In Ajax');
 }
});

ОБНОВЛЕНИЕ: та же проблема/ответ здесь

Ответ 2

Все массивы, переданные php, должны быть объектными литералами. Вот пример из JS/jQuery:

var myarray = {};  //must be declared as an object literal first

myarray[fld1] = val;  // then you can add elements and values
myarray[fld2] = val;
myarray[fld3] = Array();  // array assigned to an element must also be declared as object literal

и т.д... `

Теперь он может быть отправлен через Ajax в параметре data: следующим образом:

data: { new_name: myarray },

php выбирает это и читает его как обычный массив без необходимого декодирования. Вот пример:

$array = $_POST['new_name'];  // myarray became new_name (see above)
$fld1 = array['fld1'];
$fld2 = array['fld2'];
etc...

Однако, когда вы возвращаете массив в jQuery через Ajax, его сначала нужно закодировать с помощью json. Вот пример в php:

$return_array = json_encode($return_aray));
print_r($return_array);

И результат от этого выглядит примерно так:

{"fname":"James","lname":"Feducia","vip":"true","owner":"false","cell_phone":"(801) 666-0909","email":"[email protected]", "contact_pk":"","travel_agent":""}

{снова мы видим теги буквенного кодирования объекта}, теперь это может быть прочитано JS/jQuery как массив без каких-либо дальнейших действий внутри JS/JQuery... Вот пример в jquery ajax:

success: function(result) {
console.log(result);
alert( "Return Values: " + result['fname'] + " " + result['lname'] );
}

Ответ 3

Просто передайте объект как есть. Обратите внимание, что вы можете создать объект следующим образом

var data0 = {numberId: "1", companyId : "531"};

$.ajax({
 type: "POST",
 url: "TelephoneNumbers.aspx/DeleteNumber",
 data: dataO,
 contentType: "application/json; charset=utf-8",
 dataType: "json",
 success: function(msg) {
 alert('In Ajax');
 }
});

UPDATE кажется странной проблемой с сериализатором, возможно, он ожидает строку, из интереса вы можете попробовать следующее.

data: "{'numberId': '1', 'companyId': '531'}",

Ответ 4

Вы можете передать объект в data в $.ajax. jQuery отправит это как обычные почтовые данные, как обычную HTML-форму.

$.ajax({
    type: "POST",
    url: "TelephoneNumbers.aspx/DeleteNumber",
    data: dataO, // same as using {numberId: 1, companyId: 531}
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        alert('In Ajax');
    }
});

Ответ 5

Нет необходимости передавать данные как строку JSON, вы можете передать объект напрямую, не определяя contentType или dataType, например:

$.ajax({
    type: "POST",
    url: "TelephoneNumbers.aspx/DeleteNumber",
    data: data0,

    success: function(data)
    {
        alert('Done');
    }
});

Ответ 6

[object Object] Это означает, что объект преобразуется в строку.

Преобразован в строку:

//Copy and paste in the browser console to see result

var product = {'name':'test'};
JSON.stringify(product + ''); 

Не преобразовывается в строку:

//Copy and paste in the browser console to see result

var product = {'name':'test'};
JSON.stringify(product);