我试图让这个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
$url = "divisions.php";
$json = file_get_contents($url);
$json = utf8_encode($json);
$elements = json_decode($json);
var_dump($elements);
?>
我对PHP / ajax的经验不足以及我对让它工作的挫败感让我尝试了很多不同的东西。到目前为止,当我加载divisions.php时,我要么得到NULL,要么没有。我的直觉告诉我,这是ajax的一个问题,但我对PHP缺乏经验,我不能自信地说我的PHP足够正确,我应该得到回报。我已经尝试了var_dump,print_r,echo,绝对没有任何东西出现在与实际PHP / JSON相关的divisions.php上。任何和所有的帮助将不胜感激!
使用更新的代码回复:
我在没有utf8行的情况下使用以下php获取NULL,在utf8行中添加时使用string(0)“”:
<?php
$json = json_decode(file_get_contents('php://input'));
$elements = utf8_encode($json);
var_dump($elements);
?>
有什么想法吗?
编辑完整的php页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>untitled</title>
<link rel="stylesheet" href="styles/reset.css" />
</head>
<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="underscore.js"></script>
<script type="text/javascript" src="application.js"></script>
<script type="text/javascript" src="divisions.js"></script>
<?php
print_r($_POST);
?>
</body>
</html>
我已经为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);}
答案 0 :(得分:2)
首先,在处理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 =&gt;值对,其中键是表单字段的名称,值(显然)是字段的值。您可以像平常一样访问PHP中的值。
在考虑有关阵列结构的早期问题时,这是将数据作为对象发布的可接受情况。如果它是一个表单,那么表单结构将根据需要链接到后端,因此在data:选项中直接使用该对象就可以了。这就是整个第一个“不管它”的概念。这里的最后一个案例完全抛弃了这个对象;从它离开DOM到处理程序收到它的时间,它是100%的时间对象。
答案 1 :(得分:1)
正如@slamborne在评论中提到的,正确的电话是json_decode(file_get_contents('php://input'))
。
你的调用实际上是在调用divisions.php,这就是为什么你要返回NULL(它没有任何数据可以返回给你,因为divisions.php没有输出任何东西)