经过大量的Stackoverflow和其他方面的搜索,我无法在php中获得Json对象数组。
我的javascript文件: src.js
var jq = jQuery.noConflict();
var jarray = [{"key":0,"keysdata":1},{"key":1,"keysdata":2}];
//json objects-array
function doAjaxRequest(jarray){
jq.ajax({
url: "test.php",
type: "post",
data: {out : JSON.stringify(jarray)},
success: function(response) {
alert(response);
alert("Ajax Transmitted successfully");
}
});
} 我的php文件:test.php
<!doctype html>
<html>
<head><title>In php from ajax</title></head>
<body>
<?php
if (isset($_POST['out'])) {
$objs = json_decode($_POST['out']);
echo 'K0=' . $objs[0]->key . ', data0=' . $objs[0]->keysdata;
}
else{
echo 'out not posted';
}
?>
</body></html>到目前为止,每件事都很正常。成功函数中的警报(响应)显示
<!doctype html>
<html>
<head>
<title>In php from ajax</title>
</head>
<body>
k0=0, data0=1</body>
</html>但是,如果我以localhost/test.php的形式访问浏览器的(chrome) url框中的test.php,则发现输出如下
out not posted有人能解释一下这是怎么回事吗?我的目的是对PHP端的数组元素进行一些处理,并使用php (在页面test.php中)动态创建表单,以帮助用户编辑数据值(即1和2),浏览器url将显示为localhost/test.php。我甚至无法通过编写$objs数组( $size = count($objs);var-dump($objs)显示数组(size=0) )来找到数组的大小。
等待感谢您在这个问题上的适当投入。
发布于 2017-05-21 09:54:30
朋友们,这是我在2017年5月14日和16日发布的问题。问题分别是: 1.使用jquery成功地将JSON对象数组发送给php,但php报告数组size=0
从2017年5月12日开始,我就一直在研究这个问题,一周后,我对代码进行了彻底的反思,我也得到了问题和解决方案。我想我应该和大家分享这个故事,这样在我这种情况下的任何人都可以帮助自己。
当我运行包含jquery的页面时,一切正常。但是,如果我手动访问目标php,我一直在我的目标php文件中获取未知的索引.在线..。
我一直在想,为什么PHP没有得到"out“的值,尽管chrome调试和JQuery文件中的所有警报都能很好地显示出与PHP之间的数据传输是正常的。
经过大量的评论之后,我终于发现PHP需要通过一个名为"out“的元素从表单中发布"out”。
然后,我修改了Jquery页面中的代码,将Json数组"jarrary“存储到一个名为"out”的隐藏textbox元素(使用jquery编码)。然后,我通过Jquery ()方法发布了表单post。一切都成功了!现在,如果我手动访问PHP页面,那么PHP端和JQuery端都可以正常工作。
发布于 2017-05-16 16:13:02
这是因为当您访问浏览器中的页面时,请求是通过GET HTTP谓词发送的。
PHP代码被设置为仅检测通过POST谓词发送的数据--正如使用$_POST['out']所见证的那样--因此脚本的执行遵循替代逻辑路径,其中只回显out not posted到输出。
发布于 2017-05-16 16:21:21
要从php页面直接测试它,您需要传递数据,因为您要传递一个对象数组,通过url这样做会很麻烦。在php文件中尝试此操作。
http://localhost/test.php?testmode
<!doctype html>
<html>
<head><title>In php from ajax</title></head>
<body>
<?php
if (isset($_POST['out'])) {
$objs = json_decode($_POST['out']);
echo 'K0=' . $objs[0]->key . ', data0=' . $objs[0]->keysdata;
} elseif(isset($_GET['testmode'])) {
$str = '[{"key":0,"keysdata":1},{"key":1,"keysdata":2}]';
$objs = json_decode($str);
echo 'K0=' . $objs[0]->key . ', data0=' . $objs[0]->keysdata;
} else {
echo 'out not posted';
}
?>
</body></html>要在PHP中创建对象数组,请执行以下操作:
$myArray = array((object)array("key" => 0,"keysdata" => 1),(object)array("key" => 1, "keysdata" => 2));https://stackoverflow.com/questions/44006533
复制相似问题