我有:
...
<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]);