无法在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

  • 无法在php中处理来自Ajax的json数组
  • 自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

    上一篇: Can't process json array from Ajax in php

    下一篇: Twilio create address subaccount issue api php