首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从php中的Ajax处理json数组

无法从php中的Ajax处理json数组
EN

Stack Overflow用户
提问于 2017-05-16 16:10:54
回答 3查看 239关注 0票数 0

经过大量的Stackoverflow和其他方面的搜索,我无法在php中获得Json对象数组。

我的javascript文件: src.js

代码语言:javascript
复制
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

代码语言:javascript
复制
<!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>

到目前为止,每件事都很正常。成功函数中的警报(响应)显示

代码语言:javascript
复制
<!doctype html>
<html>
<head>
<title>In php from ajax</title>
</head>
<body>
k0=0,  data0=1</body>
</html>

但是,如果我以localhost/test.php的形式访问浏览器的(chrome) url框中的test.php,则发现输出如下

代码语言:javascript
复制
out not posted

有人能解释一下这是怎么回事吗?我的目的是对PHP端的数组元素进行一些处理,并使用php (在页面test.php中)动态创建表单,以帮助用户编辑数据值(即1和2),浏览器url将显示为localhost/test.php。我甚至无法通过编写$objs数组( $size = count($objs);var-dump($objs)显示数组(size=0) )来找到数组的大小。

等待感谢您在这个问题上的适当投入。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-21 09:54:30

朋友们,这是我在2017年5月14日和16日发布的问题。问题分别是: 1.使用jquery成功地将JSON对象数组发送给php,但php报告数组size=0

  1. 无法从php中的Ajax处理json数组

从2017年5月12日开始,我就一直在研究这个问题,一周后,我对代码进行了彻底的反思,我也得到了问题和解决方案。我想我应该和大家分享这个故事,这样在我这种情况下的任何人都可以帮助自己。

当我运行包含jquery的页面时,一切正常。但是,如果我手动访问目标php,我一直在我的目标php文件中获取未知的索引.在线..。

我一直在想,为什么PHP没有得到"out“的值,尽管chrome调试和JQuery文件中的所有警报都能很好地显示出与PHP之间的数据传输是正常的。

经过大量的评论之后,我终于发现PHP需要通过一个名为"out“的元素从表单中发布"out”。

然后,我修改了Jquery页面中的代码,将Json数组"jarrary“存储到一个名为"out”的隐藏textbox元素(使用jquery编码)。然后,我通过Jquery ()方法发布了表单post。一切都成功了!现在,如果我手动访问PHP页面,那么PHP端和JQuery端都可以正常工作。

票数 0
EN

Stack Overflow用户

发布于 2017-05-16 16:13:02

这是因为当您访问浏览器中的页面时,请求是通过GET HTTP谓词发送的。

PHP代码被设置为仅检测通过POST谓词发送的数据--正如使用$_POST['out']所见证的那样--因此脚本的执行遵循替代逻辑路径,其中只回显out not posted到输出。

票数 2
EN

Stack Overflow用户

发布于 2017-05-16 16:21:21

要从php页面直接测试它,您需要传递数据,因为您要传递一个对象数组,通过url这样做会很麻烦。在php文件中尝试此操作。

http://localhost/test.php?testmode

代码语言:javascript
复制
<!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中创建对象数组,请执行以下操作:

代码语言:javascript
复制
$myArray = array((object)array("key" => 0,"keysdata" => 1),(object)array("key" => 1, "keysdata" => 2));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44006533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档