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

javascript将数组转换为对象,以便通过ajax发送数据,javascript,ajax,arrays,object,Javascript,Ajax,Arrays,Object,我想通过ajax发送一个数据列表。所以我将所有数据推送到一个2d数组中 但是jquery的ajax不接受数组数据,数据必须是对象或查询字符串 因为javascript的对象不是push函数,所以我必须使用array来构建数据列表。 请问jquery或javascript中是否有任何函数 var countLine=$("line").length; var lines=$("line"); var lineArr=new Array(); var linesArr=new Array(); va

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

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

因为javascript的对象不是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");
    }
});
var countLine=$(“行”).length;
变量行=$(“行”);
var lineArr=新数组();
var linesArr=新数组();
变量x1、y1、x2、y2;
对于(i=0;i变化

这将发送一个带有单个属性的对象,
“linesArr”
,该属性包含数组的值


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

lineArr['x1']=lines[i].getAttributeNS(null, "x1");
每次通过循环时,您也会重用相同的
lineArr
“array”。下面的代码会更好:

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")
    });
}
var行=$(“行”);
var linesArray=[];
对于(变量i=0;i

然后,您将访问数据,如
$\u POST[“linesArr”][0][“x1”]

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


确切地说,JSON.stringify(linesArr),但这个答案很好。JSON.stringify()也是接受对象,所以我需要先将数组转换为对象。
stringify()
将接受数组、对象和标量。无需转换。请尝试这些代码,在第一个警报框中,它将显示[],而在第二个框中,它将显示{“x”:3,“y”:4},所以我说它只是接受对象。'code'(var arr=new Array();var obj=new object();arr['x']=1;arr['y']=2;obj.x=3;obj.y=4;alert(JSON.stringify(arr));alert(JSON.stringify(obj));)我不确定数据是否正确发送,我尝试了不同的方法来获取值,但无法获取值echo$_POST[0]['x1'];echo$_POST['x1'][0];echo$_POST['linesArr]['x1'];echo$_POST['linesArr'][0]['x1'];echo$_POST[0]['x1'];echo$_POST[0]['linesArr]['x1'];非常感谢,现在是成功了,我发现了为什么我以前不能访问数据,因为“data:{linesArr:linesArr}”这两个词不能是相同的,所以现在linesArr:linesArray是可以的。但有一件事我仍然不明白,为什么在数组中存储非数字属性并重用相同的lineArr“array”是一个大问题?您可以重复使用相同的名称;这不是问题。为了清晰起见,我将示例代码更改为
linesArray
,因为我讨厌缩写,但您可以随意更改,这样就不会出现问题。至于为什么不应该在数组中存储非数字属性……在JavaScript中,就像在大多数其他语言中一样,数组是典型的计算机科学数组,即非负数字索引的集合。PHP有一个叫做“数组”的东西,它实际上是一个从任何字符串到任何对象的映射,这是令人困惑的;在JavaScript中,这样的映射称为对象。因此,尝试将非数字属性放到JavaScript数组(或C++数组、java数组、C++数组或Pascal数组……)上。这毫无意义,会产生荒谬的结果和/或错误。
lineArr['x1']=lines[i].getAttributeNS(null, "x1");
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")
    });
}