在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>
但是如果我在浏览器的(chrome)网址框中以testhost / test.php的身份访问我的test.php,那么我会将输出视为
out not posted
有人可以解释一下这里发生了什么吗?我的目的是对PHP端的数组元素进行一些处理,并使用php(在页面test.php中)动态创建表单,以帮助用户编辑数据值(即,1和2)和浏览器URL将显示为localhost / test.php。通过编写$ size = count($ objs),我甚至找不到数组$ objs的大小; var-dump($ objs)显示Array(size = 0)。
等待感谢您对此问题的正确投入。
答案 0 :(得分:2)
这是因为当您在浏览器中访问页面时,请求将通过getResponseCode
HTTP谓词发送。
您的PHP代码设置为仅检测通过GET
动词发送的数据 - 正如您使用POST
所见证的那样 - 因此脚本的执行遵循您只回显{{{ 1}}到输出。
答案 1 :(得分:0)
要直接从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));
答案 2 :(得分:0)
朋友们,这是参考我在2017年5月14日和16日发布的问题。问题分别是: 1.使用jquery ajax但php成功发送到php的JSON对象数组 报告数组大小= 0
自2017年5月12日以来,我一直在研究这个问题,并且在一周的时间里,在彻底反省我的代码之后,感谢我。我得到了问题和解决方案。我虽然应该与人分享这个故事,所以像我这样的人都能帮助自己。
当我运行包含jquery的页面时,一切正常。但是,如果我手动访问目标php,我一直在不断获取未知索引&#34; out&#34;在我的目标php文件.........在线.....
我一直在想为什么PHP没有得到&#34; out&#34;尽管Chrome调试和JQuery文件中的所有警报都完美地工作,以显示PHP之间的数据传输是否正常。
经过大量的评论,我终于发现PHP需要&#34; out&#34;通过一个名为&#34; out&#34;。
的元素从表单发布然后我在Jquery页面中修改了我的代码以存储Json数组&#34; jarrary&#34;字符串化为隐藏的文本框元素后,名称为&#34; out&#34; (使用jquery编码)。然后我通过Jquery submit()方法发表了表单帖子。事情有效! 现在,如果我手动访问PHP页面,我会得到PHP方面和JQuery方面都正常工作。