我有一个JSON数组,我正在传递给PHP。最终我将从我的PHP文件传递和接收更多,但目前这就是它。现在它正在接收1个阵列并发送回相同的阵列,没问题。我可以循环遍历Javascript中的数据,但是如何遍历我传递给我的PHP文件的数组?我得到foreach的错误,for循环似乎没有任何帮助。建议?
的Javascript
var fullName = ["John Doe", "Jane Doe"];
$(window).load(function(){
getList();
});
function getList(){
$.getJSON(
"names.php",
{names : JSON.stringify(fullName)},
function(data)
{
for(var i = 0; i < data.test.length; i++)
{
window.alert(data.test[i]);
}
}
);
}
PHP
<?php
$names=json_decode($_REQUEST['names']);
foreach($names as $name)
{
echo $name;
}
$data['test'] = $names;
echo json_encode($data);
foreach行上的foreach错误告诉我“警告:为foreach()提供的参数无效”
答案 0 :(得分:1)
json_decode()
不会返回数组。要做到这一点,你需要做json_decode($_REQUEST['names'], true)
答案 1 :(得分:0)
使用时似乎有些奇怪的事情:
{names : JSON.stringify(fullName)}
在使用GET
或POST
发送键值对时,您可能需要正确编码值。
您可以使用以下方式执行此操作:
{names : encodeURIComponent(JSON.stringify(fullName))}
答案 2 :(得分:0)
编辑:jQuery再次疯狂。
$.getJSON("names.php?names=" + encodeURIComponent(JSON.stringify(fullName)), function(data)
{
for(var i = 0; i < data.test.length; i++)
{
window.alert(data.test[i]);
}
}
);
问题在于它是将数组中的每个项目添加为URI的单独值。
答案 3 :(得分:0)
尝试
$names=json_decode($_POST['names']); // or $_GET
而不是
$names=json_decode($_REQUEST['names']);
由于php.ini conf,有时$ _REQUEST可能为空。见request_order
答案 4 :(得分:0)
试试这个, 在你的javascript函数中用
替换下面的行 {names : JSON.stringify(fullName)},
与
"{names :"+ JSON.stringify(fullName) +"}",
调试测试
var fullName = ['John Doe', 'Jane Doe'];
console.log({names : JSON.stringify(fullName)});
// gives Object { names="["John Doe","Jane Doe"]"}
但是
console.log("{names :"+ JSON.stringify(fullName) +"}");
// gives {names :["John Doe","Jane Doe"]}
//所以我猜第二个是正确的json字符串传递
答案 5 :(得分:0)
/* client-side */
$.ajax({
/* the request's method: */
type: 'GET',
/* the request's location: */
url:'/names.php',
/* the request's fields: */
data: JSON.stringify({names: fullName}),
/* the request's content-type : */
contentType: 'application/json; charset=utf-8',
/* the response's content-type: */
dataType:'json',
/* the callback function */
success: function(json){
if(json.length > 0){
$.each(json, function(i, v){
console.info(v);
});
}
else {
alert('wtf?!');
}
});
/* server-side */
$req=array_merge($_GET, $_POST);
// die(print_r($req));
$names=json_decode($req['names']);
header('content-type: application/json; charset=utf8;');
echo json_encode($names);
或者可以为请求设置请求方法,我只是有点懒,并且使用该array_merge(),无论请求是POST还是GET都没关系(好吧,函数$ .ajax默认值要得到)。最佳做法是使用FireBug并检查它的网络面板,尤其是XHR选项卡。可能问题应该是:“如何使用XHR调试器?”因为这根本没什么大不了的。
似乎jQuery API略有更新(参见弃用通知):