Can';在php中处理来自Ajax的json数组

Can';在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: "

在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>
有人能解释一下这是怎么回事吗?我的目的是在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));