Php ';未定义索引';尝试解析JSON字符串时
我认为有一些语法错误或概念错误 我有一个简单的AJAX调用,其中我将JSON字符串传递给PHP文件。 这就是AJAX调用的样子:Php ';未定义索引';尝试解析JSON字符串时,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我认为有一些语法错误或概念错误 我有一个简单的AJAX调用,其中我将JSON字符串传递给PHP文件。 这就是AJAX调用的样子: <script> $(document).ready(function () { $("#btn").click(function() { var id = $('#id').val(); var name = $('#name').val(); var Address = $('#Address
<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>
我的
topost
来自我的AJAX,对吗?那么为什么在我的PHP中它是“未定义”的呢?您的数据结构不正确,它应该是:
data: {
"id": id,
"name": name,
... ect
}
您正在将topost
作为字符串传递,而它应该是一个对象有两个问题:
您的引号不匹配(您没有对象的id
键的起始引号)
JSON需要双引号“
而不是单引号”
来引用标识符
试试这个:
data: {
topost: '{"id":"'+id+'","name":"'+name+'","Address":"'+Address+'"}'
},
或者,您可以使用对对象文字进行编码:
data: {
topost: JSON.stringify({id: id, name: name, Address: Address})
},
您可以使用Douglas Crockfords为本机不支持此功能的浏览器提供此功能。不确定这是否是导致问题的原因,但您可以改进构建数据对象以发送的方式-
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",
...
我只是飞过这里,这可能根本不是您的问题,但是当您使用内容类型:application/json时,PHP不会自动解析正文中的json。这样指定的变量不会显示在$\u POST变量中
您必须自己解析主体,这并不像听起来那么困难。像这样简单的操作会将json主体导入到_POST变量中。这不是最安全的实现,我不建议在没有清理的情况下这样使用它:
$_POST=array_merge($_POST,json_decode(file_get_contents('php://input'),true));
希望有帮助。错误是否比“未定义的符号”更具体?错误是未定义的符号
。如果问题是存在$\u POST['topost']
,则错误将读取-未定义索引“topost”“是的,对不起,这就是错误所在。我现在编辑了我的问题,我在我的谷歌浏览器控制台上看到,点击提交按钮,我得到一个错误:选项file:///C:/workspace/Settling/assets/www/connection.php 资源加载失败为什么会这样?位于本地主机上的php文件。如何告诉ajax我的connection.php在哪里?您需要给出connection.php
文件的路径。如果您的文件位于文件夹中,而不是web根目录中,那么您可以为其提供如下路径-/folder\u NAME/connection.php
。注意第一个/
-这表示路径是相对于您的web根目录的。他以JSON字符串的形式发送一个post参数(他也可以用您的方式发送,可能会更简单),但这并不意味着他所做的是错误的。我在我的google chrome控制台中看到,单击提交按钮时,我得到一个错误:选项file:///C:/workspace/Settling/assets/www/connection.php 资源加载失败为什么会这样?位于本地主机上的php文件。如何告诉ajax我的connection.php在哪里?我在google chrome控制台中看到,单击submit按钮时出现错误:OPTIONSfile:///C:/workspace/Settling/assets/www/connection.php 资源加载失败为什么会这样?位于本地主机上的php文件。如何告诉ajax我的connection.php在哪里?
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",
...
$_POST=array_merge($_POST,json_decode(file_get_contents('php://input'),true));