Can';在php中处理来自Ajax的json数组
在Stackoverflow和其他地方进行了大量搜索之后,我无法在php中获得Json对象数组 我的javascript文件:src.jsCan';在php中处理来自Ajax的json数组,php,jquery,json,ajax,Php,Jquery,Json,Ajax,在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: "
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>
有人能解释一下这是怎么回事吗?我的目的是在PHP端对数组元素进行一些处理,并使用PHP(在test.PHP页面中)动态创建一个表单,以帮助用户编辑数据值(即1和2),浏览器url将显示为localhost/test.PHP。我甚至无法通过写入$size=count($objs)来找到数组$objs的大小;var dump($objs)显示数组(大小=0)
等待您对此问题的正确意见。这是因为当您在浏览器中访问页面时,请求通过
GET
HTTP动词发送
您的PHP代码设置为仅检测通过
POST
动词发送的数据-您使用$\u POST['out'可以看到这一点
-因此,脚本的执行遵循另一个逻辑路径,在该路径中,您只回显而不是将发布到输出。这是因为当您访问浏览器中的页面时,请求通过GET
HTTP谓词发送
您的PHP代码设置为仅检测通过POST
动词发送的数据-正如您使用$\u POST['out']
所见证的那样-因此,脚本的执行遵循另一条逻辑路径,您只会将out not POST
回显到输出中。要直接从PHP页面测试它,您需要将数据传递给它,因为您要传递一个对象数组,所以通过url传递将非常混乱。在php文件中试试这个
要直接从php页面对其进行测试,您需要向其传递数据,因为您传递的是一个对象数组,通过url进行测试会非常麻烦。在php文件中试试这个
朋友们,这是关于我在2017年5月14日和16日在这里发布的问题。问题分别是:
1.使用jquery ajax和php成功发送到php的JSON对象数组
报告数组大小=0
无法在php中处理来自Ajax的json数组
我从2017年5月12日起就一直在研究这个问题,谢天谢地,在彻底反省了我的代码等之后,一周的时间里,我找到了问题和解决方案。我想我应该和大家分享这个故事,这样在我这样的情况下任何人都可以自助
当我运行包含jquery的页面时,一切正常。但是如果我手动访问目标php,我会不断地在目标php文件中获取未知索引“out”。。。。。。。。。在线
我一直在想,为什么PHP没有得到“out”的值,尽管chrome调试和JQuery文件中的所有警报都能完美地工作,以显示与PHP之间的数据传输是正常的
经过多次审查,我终于发现PHP需要通过名为“out”的元素从表单发布“out”
然后,我修改了Jquery页面中的代码,将Json数组“jarrary”字符串化为一个名为“out”的隐藏文本框元素(使用Jquery编码)后存储起来。然后我通过Jquery submit()方法制作了表单post。一切都成功了!
现在,如果我手动访问PHP页面,我会发现PHP端和JQuery端都工作正常。朋友们,这是关于我在2017年5月14日和16日发布的问题。问题分别是:
1.使用jquery ajax和php成功发送到php的JSON对象数组
报告数组大小=0
无法在php中处理来自Ajax的json数组
我从2017年5月12日起就一直在研究这个问题,谢天谢地,在彻底反省了我的代码等之后,一周的时间里,我找到了问题和解决方案。我想我应该和大家分享这个故事,这样在我这样的情况下任何人都可以自助
当我运行包含jquery的页面时,一切正常。但是如果我手动访问目标php,我会不断地在目标php文件中获取未知索引“out”。。。。。。。。。在线
我一直在想,为什么PHP没有得到“out”的值,尽管chrome调试和JQuery文件中的所有警报都能完美地工作,以显示与PHP之间的数据传输是正常的
经过多次审查,我终于发现PHP需要通过名为“out”的元素从表单发布“out”
然后,我修改了Jquery页面中的代码,将Json数组“jarrary”字符串化为一个名为“out”的隐藏文本框元素(使用Jquery编码)后存储起来。然后我通过Jquery submit()方法制作了表单post。一切都成功了!
现在,如果我手动访问PHP页面,我会发现PHP端和JQuery端都工作正常。感谢Rory的宝贵回复。你的意思是,如果我手动访问php,那么请求将被视为GET。当jqueryajax以编程方式访问php页面时,会发生同样的情况吗?你能解释一下问题的其余部分吗?你剩下的问题一点也不清楚。您可以更改逻辑以同时查找$\u GET['out']
和$\u POST['out']
,但在单个操作中需要同时使用这两种方法的情况非常罕见,通常表明站点的结构需要更正。刚才我在ajax请求中设置type=“GET”进行了测试。我的警报显示为“2”可能是数组的大小(我还没有使用count($objs)。另外,如果我手动访问test.php,我会得到与以前相同的输出。我认为我应该在发送数组时使用post方法,这也是json对象。感谢Rory的宝贵响应。你的意思是如果我手动访问php,那么请求将被视为get。当jquery以编程方式访问php页面时,会发生同样的情况吗阿贾克斯?你能解释一下问题的其余部分吗
<!doctype html>
<html>
<head>
<title>In php from ajax</title>
</head>
<body>
k0=0, data0=1</body>
</html>
out not posted
<!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>
$myArray = array((object)array("key" => 0,"keysdata" => 1),(object)array("key" => 1, "keysdata" => 2));