我有一个从AJAX代码中调用的foreach循环。看起来foreach循环被直接跳过了。我最终想让foreach循环使用数组中的每个值执行查询,但我首先尝试测试foreach循环是否工作(它不工作)。我收到的警报(来自我的AJAX)只是原始数组,而不是添加了项的数组。
PHP:
$data = array();
if(isset($_POST['myArray']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']){
$data = $_POST['myArray'];
foreach ($data as $item) {
$data[] = $item;
}
echo json_encode($data);
die();
} AJAX:
$(document).ready(function(){
$('#btn-addkegs').click(function() {
var arr = kegs;
var myArray = JSON.stringify(arr);
$.ajax({
url: "addkegs.php",
method: "POST",
dataType: "json",
data: {myArray: myArray},
success: function (result) {
alert("Your kegs have been added! These include: " + result);
textarea.value = "";
kegs = [];
}
});
});
});至于行var arr = kegs;,数组'kegs‘的值是通过一个输入字段和其他AJAX来设置的,但这一切都很好。我想我的问题出在我的PHP代码上。
发布于 2016-11-30 11:35:23
如果您仅通过post发送值...就像在评论中一样: 1,2,3你的$_POST‘’myArray‘是你发送到的内容的原样接收。
因此,数据变量将接收类似于'1','2','3‘的数组
好吧..。因为您没有将变量$data创建为数组,是的,只是将一个数组放入其中。
PHP不认为$data[]变量与$data变量相同。
因此,PHP神奇地覆盖了每个相同值的值。
因此,我认为如果您想重复同一数组中的值,则必须使用array_push引用该数组
$data = $_POST['myArray'];
foreach ($data as $item) {
array_push($data, $item);
}现在,当您返回此数组时,您将得到类似{1,2,3,1,2,3}的响应
发布于 2016-11-30 12:27:06
@David评论的答案:
在浏览器的调试工具中,查看网络请求。检查AJAX请求及其响应。如果结果完全用引号括起来,那么它只是一个字符串,而不是数组。您可能需要对$_POST‘’myArray‘服务器端进行JSON解码,才能将其解释为数组。
我需要将$data = $_POST['myArr'];更改为$data = json_decode($_POST['myArr']);。
https://stackoverflow.com/questions/40879190
复制相似问题