我认为存在一些语法错误或概念错误。
我有一个简单的AJAX调用,我将JSON字符串传递给PHP文件。 这就是AJAX调用的样子:
<script>
$(document).ready(function () {
$("#btn").click(function() {
var id = $('#id').val();
var name = $('#name').val();
var Address = $('#Address').val();
$.ajax({
url: "connection.php",
type: "POST",
data: { topost : "{id':'" + id + "','name':'" + name + "','Address':'" + Address + "'}"},
datatype: "jsonp",
success: function (status) {
if (status.success == false) {
alert("Failure!");
} else {
alert("Success!");
}
}});
});
});
</script>
这就是我在服务器端PHP文件中解析字符串的方法:
<?php
header('Content-type: application/json');
$server = "localhost";
$username = "root";
$password = "";
$database = "jqueryex";
$con = mysql_connect($server, $username, $password);
if($con) { echo "Connected to database!"; }
else { echo "Could not connect!"; }
//or die ("Could not connect: " . mysql_error());
mysql_select_db($database, $con);
$thedata= json_decode($_POST['topost']);
echo ($thedata);
mysql_close($con);
?>
为什么我会在'undefined index topost'
的行中出现错误{<1}}:
$thedata= json_decode($_POST['topost']);
我的topost
来自我的AJAX,对吗?那么为什么我的PHP中“未定义”呢?
答案 0 :(得分:1)
我只是飞到这里,这可能不是你的问题,但是当你使用Content-Type:application / json时,PHP不会自动解析体内的json。这样指定的变量不会出现在$ _POST变量中。
你必须自己解析身体,这并不像听起来那么困难。像这样简单的东西会将json体导入_POST变量。这不是最安全的实现,我不建议在没有清理的情况下使用它:
$_POST=array_merge($_POST,json_decode(file_get_contents('php://input'),true));
希望它有所帮助。
答案 1 :(得分:0)
您正在错误地构造data
对象,它应该是:
data: {
"id": id,
"name": name,
... ect
}
您将topost
作为字符串传递,而它应该是对象
答案 2 :(得分:0)
两个问题:
id
键的开头报价)"
而不是单引号'
来引用标识符。试试这个:
data: {
topost: '{"id":"'+id+'","name":"'+name+'","Address":"'+Address+'"}'
},
或者,您可以使用JSON.stringify()对对象文字进行编码:
data: {
topost: JSON.stringify({id: id, name: name, Address: Address})
},
您可以使用Douglas Crockfords JSON2.js library向本机不支持的浏览器提供此功能。
答案 3 :(得分:0)
不确定这是否是导致问题的原因,但您可以改进构建数据对象以进行发送的方式 -
var id = $('#id').val();
var name = $('#name').val();
var Address = $('#Address').val();
var dataObj = {};
dataObj.id=id;
dataObj.name=name;
dataObj.Address=Address;
$.ajax({
url: "connection.php",
type: "POST",
data: { 'topost' : dataObj },
datatype: "jsonp",
...