0

我使用此代码发送整数的一维数组,但如何使其发送和接收由整数和字符串组合形成的二维数组,例如 [此处的数字] [“此处的文本”] 但 url 有一个限制,因此我可以不要做一个大数组

//Send data to php
                var queryString ="?";
                            for(var t=0;t<alldays.length;t++)
                                {   
                                    if(t==alldays.length-1)
                                    queryString+="arr[]="+alldays[t];
                                    else
                                    queryString+="arr[]="+alldays[t]+"&";
                                }
                ajaxRequest.open("POST", "forbidden.php" + queryString, true);
                ajaxRequest.send(null); 

            }

// Create a function that will receive data sent from the server(sended as echo json_encode($array))
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){

        var myArray = ajaxRequest.responseText.replace("[","").replace("]","").replace(/"/g,"").split(",");
        for(var i=0; i<myArray.length; i++) { alldays[i] = parseInt(myArray[i]); } 

        }}
4

2 回答 2

1

不要将请求作为查询字符串包含在 URL 中,而是将其作为 POST 的正文发送:

var queryString ="";
for(var t=0;t<alldays.length;t++)
{
    if(t==alldays.length-1)
        queryString+="arr[]="+alldays[t];
    else
        queryString+="arr[]="+alldays[t]+"&";
}
ajaxRequest.open("POST", "forbidden.php", true);
ajaxRequest.send(queryString); 

如果它作为 POST 正文发送,则对查询长度没有相同的限制。

但是,您所有的 POST 变量都是命名的"arr[]",这会导致问题。我建议改用以下编码方案:

var queryString = "n=" + alldays.length;
for (var t=0; t<alldays.length; t++)
{
    queryString += "&arr_" + t + "=" + alldays[t];
}
ajaxRequest.open("POST", "forbidden.php", true);
ajaxRequest.send(queryString); 

然后在服务器上,您可以检索数组元素的数量,$_POST["n"]然后处理$_POST["arr_" + t]每个t从 0 到n-1.

于 2012-12-05T23:18:00.107 回答
0

您确实使用了POST请求 - 所以不要GET在查询字符串的参数中发送数组!

var queryString =""; // no question mark
// construct rest of query string here
ajaxRequest.open("POST", "forbidden.php", true);
ajaxRequest.send(queryString);

此外,使用 JSON 作为响应。PHP 端: json_encode, JavaScript 端:JSON.parse

于 2012-12-05T23:19:00.010 回答