是否可以通过JavaScript向AJAX提交数组?

时间:2017-05-10 23:07:08

标签: javascript php arrays ajax

我有:

...
<script>
function test(){
    var pageName="TestArray.php";
    var text="numbers";
    var array=['one','two'];
    var xmlhttp=new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            alert(xmlhttp.responseText);
        }
    };
    xmlhttp.open("GET", pageName+"?text="+text+"&array[]=["+array+"]");
    xmlhttp.send();
 }
 test();

</script>
...

在TestArray.php中,

<?php
    $response="";
    $numbers="";
    if(isset($_GET["text"])){
        $numbers=$_GET["text"];
        $response="numbers=".$numbers."&";
    }
    if(!empty($_GET["array"])){
        foreach($_GET["array"] as $checkedItem){
            $response.=$checkedItem."&";
        }
        $response=substr($response,0,strlen($response)-1);
    }
    echo $response;
?>

它应警告&#39;数字=数字&amp; one&amp; two&#39;。 如何使foreach($ _ GET [&#34; array&#34;]){...}通过决定在text =&#34; + text +?之后写什么来工作?

2 个答案:

答案 0 :(得分:1)

如前面的答案所述,您需要将数组参数化为url字符串。

如果必须重复创建url字符串,可以使用函数将对象转换为URL参数字符串。

&#13;
&#13;
const es6parameterize = obj => 
  Object.keys(obj).map(k => 
    Array.isArray(obj[k]) 
      ? obj[k].map(x => `${k}[]=${x}`).join('&')
      : `${k}=${obj[k]}`
  ).join('&')


function es5parameterize(obj) {
  var ret = []
  for (var k in obj) {
    if (obj[k].constructor === Array) {
      [].push.apply(ret, obj[k].map(function(x) { return k + '[]=' + x }))
    }
    else {
      ret.push(k + '=' + obj[k])
    }
  }
  return ret.join('&')
}

console.log(
  "pageName?" + es6parameterize({ text: 'foo', array: ['bar', 'baz'] })
)

console.log(
  "pageName?" + es5parameterize({ text: 'foo', array: ['bar', 'baz'] })
)
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你应该改变这个

  xmlhttp.open("GET", pageName+"?text="+text+"&array[]=["+array+"]");

对此:

xmlhttp.open("GET", pageName+"?text="+text+"&array[]="+array[0]+"&array[]="+array [1]);