我构建了一个对象数组,然后使用ajax进行字符串化和发送,问题是我无法遍历结果并获得所需的数据。
当我运行foreach循环时整个脚本doit.php
崩溃但如果我只是回显一个随机字符串,它将发出警报并控制台记录该字符串。
的index.php
<script>
function ajax(url, parameters, method, form = false, callback = false) {
var ajax_http = new XMLHttpRequest();
var ajax_parameters;
ajax_http.open(method, url, true);
if (form === false) {
ajax_parameters = parameters;
ajax_http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
} else {
ajax_parameters = new FormData(form);
}
ajax_http.onreadystatechange = function () {
if (ajax_http.readyState === 4 && ajax_http.status === 200) {
if (callback) {
callback(ajax_http.responseText);
} else {
return ajax_http.responseText;
}
}
};
ajax_http.send(ajax_parameters ? ajax_parameters : null);
}
var data = [];
var obj = {id: 1, name: "christian"};
data.push(obj);
var obj = {id: 2, name: "frej"};
data.push(obj);
console.log(data);
data = JSON.stringify(data);
console.log(data);
ajax("doit.php", "data=" + data, "POST", false, function (results) {
alert(results);
console.log(results);
});
</script>
doit.php
$data = json_decode($_POST['data']);
$str = "";
foreach($data as $person){
$str .= $person["name"];
}
echo "str = " . $str;
答案 0 :(得分:3)
如果您只想访问单列数据并将对象/元素粘合在一起,则无需循环并使用连接。
我认为array_column()
和implode()
看起来会更干净......
代码:(Demo)
$data=[(object)['id'=>1,'name'=>'christian'],(object)['id'=>2,'name'=>'frej']];
echo implode(', ',array_column((array)$data,'name'));
// ^^^^^^^- cast as array if you are not using json_decode($data,true);
输出:
christian, frej
如果您使用$data = json_decode($_POST['data'],true);
(我推荐它),那么您可以写:
echo implode(', ',array_column($data,'name'));