无法在php中处理来自Ajax的json数组
在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)url框中访问我的test.php作为localhost / 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)。
等待欣赏你在这个问题上的正确投入。
这是因为当你访问浏览器中的页面时,请求通过GET
HTTP动词发送。
您的PHP代码被设置为只检测通过POST
动词发送的数据 - 正如您使用$_POST['out']
所见证$_POST['out']
- 因此脚本的执行遵循备用逻辑路径,在此路径中您只回声out not posted
到输出。
要直接从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));
朋友们,这是参考我在2017年5月14日和16日发布的问题。问题分别是:1.使用jQuery ajax成功发送到php的JSON对象数组,但php报告数组大小= 0
自2017年5月12日以来,我一直在努力解决这个问题,在一周的时间里,我彻底反思了我的代码等等之后,我得到了问题和解决方案。 虽然我应该与人分享这个故事,所以像我这样的情况下的任何人都可以帮助自己。
当我运行包含jquery的页面时,一切正常。 但是,如果我手动访问目标PHP,我一直在不断得到未知的索引“出”在我的目标PHP文件.........在线.....
我一直在想,为什么PHP没有获得“out”的价值,尽管chrome调试和JQuery文件中的所有警报完美地工作,以揭示PHP和PHP之间的数据传输是否正常。
经过很多评论后,我终于可以发现PHP需要“out”通过名称为“out”的元素从表单发布。
然后,我在Jquery页面中修改了我的代码,以在将字符串化为名称为“out”的隐藏文本框元素(使用jquery编码)之后,将Json数组存储为“jarrary”。 然后我通过Jquery submit()方法创建了表单发布。 事情奏效! 现在,如果我手动访问PHP页面,那么PHP端和JQuery端都可以正常工作。
链接地址: http://www.djcxy.com/p/58127.html