是否可以通过JavaScript将数组提交到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;
?>

它应该提醒"数字=数字&一和二"。如何通过决定在text="+text+之后写什么来使foreach($_GET["array"]({...}工作?

如上一个答案所述,您需要将数组参数化为 url 字符串。

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

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'] })
)

你应该改变这个

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

对此:

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

最新更新