如何获取AJAX发送的JSON以使用PHP

我试图让这个JSON可以被PHP使用,我在路障之后遇到了障碍,所以我想知道是否有人可以帮助我。

我将JSON存储在变量divisionsJSON中:

var divisionsJSON = JSON.stringify(divisions); 

然后我尝试使用.ajax发布以下内容:

 $.ajax({ url: "divisions.php", type: "post", data: divisionsJSON, success: function(){ alert("success"); $("#result").html('submitted successfully'); }, error:function(){ alert("failure"); $("#result").html('there is error while submit'); } }); 

(我从SO上的另一个问题复制了这个,但我的html中没有任何内容,id =“result” – 我想我可以删除那部分[删除已确认])

然后,我的divisions.php页面包含以下内容:

  

我对PHP / ajax缺乏经验加上我对让它工作的挫败感让我尝试了很多不同的东西。 到目前为止,当我加载divisions.php时,我要么得到NULL,要么没有。 我的直觉告诉我这是ajax的一个问题,但我对PHP缺乏经验,我不能满怀信心地说我的PHP是正确的,我应该回到哪里。 我已经尝试过var_dump,print_r,echo,在与实际的PHP / JSON相关的divisions.php上绝对没有出现。 任何和所有的帮助将不胜感激!

响应更新的代码:

我在没有utf8行的情况下使用以下php获取NULL,并且当我在utf8行中添加时使用string(0)“”:

  

有任何想法吗?

编辑完整的PHP页面:

     untitled           

我已经为php,print_r($ _ POST);, json_decode($ _ POST);等尝试了多行,但是我根据我在其他SO和我看到的这个页面上所看到的内容改变了很多东西。我真的发呆了。

编辑:这个代码,我打算制作一个数组,不会产生JSON? 因为它似乎不像我在使用JSON atm。

 var divisions = []; for (var i = 0; i < arr.length; i++) { if(arr[i].value != "N/A"){ var obj = { "login": arr[i].login, "value": "http://www.value.net/index/" + arr[i].value}; divisions.push(obj);} 

首先,在处理JSON时,最好的办法是尽可能地让它独自存在。 想想它是否是脆弱的商品。 你做的任何事情都可以打破它。

考虑到这一点,不要使用stringify(),事实上你不需要因为JQuery会检测它并为你处理它(因为它们知道它很脆弱)。

其次,选项数据:在$ ajax()方法中需要给出一个对象。 一般来说你会做这样的事情,

 data: {mydata:divisionsJSON} 

这样你就可以通过后端访问JSON了

 $json = json_decode($_POST['mydata']); 

或者,根据您设置分区数组的方式,您可以将其作为对象数据发布:正在寻找并通过$ _POST [‘divisions_key’] = divisions_value在PHP中访问它; 但这会导致以后出现各种各样的问题,并且将前端和后端硬连接起来非常糟糕(大多数情况下,例外情况如下)。

此外,如果您期望JSON响应,则需要使用dataType:’JSON’选项在原始调用中指定它,以便JQuery可以适当地处理它。

 $.ajax({ url: "divisions.php", type: "post", data: {mydata:divisions}, success: function(response){ $("#result").html(response.message); }, error:function(response){ $("#result").html(response.message); } }); 

但是,在我们走得太远之前,JS中的分区变量令人不安。 来自哪里? 这是一种机会吗? 如果是这样,你可以使用serialize()这样

 var divisions = $('#myform').serialize(); 

这将创建key => value对,其中key是表单字段的名称,值(显然)是字段的值。 您可以像平常一样访问PHP中的值。

在考虑有关arrays结构的早期问题时,这是将数据作为对象发布的可接受情况。 如果它是一个表单,那么表单结构将根据需要链接到后端,因此在data:选项中直接使用该对象就可以了。 这就是“完全放弃”的第一个概念。 这里的最后一个案例完全抛弃了这个对象; 从它离开DOM到处理程序收到它的时间,它是100%的时间对象。

正如@slamborne在评论中提到的,正确的调用是json_decode(file_get_contents('php://input'))

你的调用实际上是在调用divisions.php,这就是为什么你得到NULL的原因(它没有任何数据可以返回给你,因为divisions.php没有输出任何东西)。