Опубликовать объект как данные с помощью 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);