使用Jquery Ajax将对象作为数据发布

时间:2009-07-01 09:27:26

标签: jquery

我尝试过的代码如下:

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数据传递,我该怎么做?

6 个答案:

答案 0 :(得分:38)

我将保留原来的答案,但以下是您需要接近它的方法。 (请原谅我,但是因为我使用jquery的常规asp.net / web服务已经很长时间了:)。

您需要使用以下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');
 }
});

更新:相同的问题/答案here

答案 1 :(得分:8)

传递给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...

但是,当您通过Ajax将数组返回到jQuery时,必须首先使用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":"jp@gmail.com", "contact_pk":"","travel_agent":""}

{再次我们看到对象文字编码标签}现在这可以被JS / jQuery读取为一个数组,而JS / JQuery中没有任何进一步的动作......这是jquery ajax中的一个例子:

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

答案 2 :(得分: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对于序列化程序来说似乎是一个奇怪的问题,也许是期待一个字符串,您可以尝试以下内容。

数据:“{'numberId':'1','companyId':'531'}”,

答案 3 :(得分:3)

没有必要将数据作为JSON字符串传递,您可以直接传递对象,而无需定义contentTypedataType,如下所示:

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

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

答案 4 :(得分:0)

您可以将对象传递给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 :(得分:0)

[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);