我有:
...
<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 +?之后写什么来工作?
答案 0 :(得分:1)
如前面的答案所述,您需要将数组参数化为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'] })
)
&#13;
答案 1 :(得分:0)
你应该改变这个
xmlhttp.open("GET", pageName+"?text="+text+"&array[]=["+array+"]");
对此:
xmlhttp.open("GET", pageName+"?text="+text+"&array[]="+array[0]+"&array[]="+array [1]);