javascript将数组转换为对象以通过ajax发送数据

时间:2011-11-04 20:01:09

标签: javascript ajax arrays object

我想通过ajax发送数据列表。所以我将所有数据推送到2d数组

但是jquery的ajax不接受数组数据,数据必须是对象或查询字符串

由于javascript的Object没有push函数,我必须使用array来构建数据列表。 在jquery或javascript中有任何函数,让我

var countLine=$("line").length;
var lines=$("line");
var lineArr=new Array();
var linesArr=new Array();
var x1, y1, x2, y2;
for(i=0; i<countLine; i++)
{
    lineArr['x1']=lines[i].getAttributeNS(null, "x1");
    lineArr['y1']=lines[i].getAttributeNS(null, "y1");
    lineArr['x2']=lines[i].getAttributeNS(null, "x2");
    lineArr['y2']=lines[i].getAttributeNS(null, "y2");
    linesArr.push(lineArr);
}
$.ajax({
    type: "POST",
    url: "test.php",
    data: linesArr,

    async: true,
    cache: false,

    success: function(data){
        $("#txt").text(data);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown){
        alert("fail");
    }
});

2 个答案:

答案 0 :(得分:1)

更改

data: linesArr

data: { linesArr: linesArr }

这将发送一个包含单个属性"linesArr"的对象,该属性包含数组的值。


编辑:你有一个更大的问题。您正在尝试将非数字属性存储在数组中,如以下行所示:

lineArr['x1']=lines[i].getAttributeNS(null, "x1");

每次循环时,您也会重复使用相同的lineArr“数组”。以下代码可以更好地工作:

var lines = $("line");
var linesArray = [];

for (var i = 0; i < lines.length; ++i) {
    var line = lines[i];

    linesArray.push({
        x1: line.getAttributeNS(null, "x1"),
        y1: line.getAttributeNS(null, "y1"),
        x2: line.getAttributeNS(null, "x2"),
        y2: line.getAttributeNS(null, "y2")
    });
}

然后您将访问$_POST["linesArr"][0]["x1"]等数据。

答案 1 :(得分:1)

您需要使用JSON.stringify()将对象转换为JSON字符串。

http://json.org/