0

我认为存在一些语法错误或概念错误。

我有一个简单的 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'在它说的那一行出现错误:

$thedata= json_decode($_POST['topost']);

topost来自我的 AJAX,对吗?那么为什么它在我的 PHP 中是“未定义的”?

4

4 回答 4

1

我只是飞过这里,这可能根本不是您的问题,但是当您使用 Content-Type: application/json 时,PHP 不会自动解析正文中的 json。像这样指定的变量不会显示在 $_POST 变量中。

您必须自己解析主体,这并不像听起来那么困难.. 像这样简单的事情会将 json 主体导入 _POST 变量。这不是最安全的实现方式,我不建议在不经过清理的情况下这样使用它:

$_POST=array_merge($_POST,json_decode(file_get_contents('php://input'),true));

希望能帮助到你。

于 2012-08-01T12:39:40.940 回答
0

您的data对象结构不正确,它应该是:

data: {
    "id": id,
    "name": name,
    ... ect
}

topost作为字符串传递,而它应该是一个对象

于 2012-07-10T14:30:54.173 回答
0

两个问题:

  1. 您的引号不匹配(您没有id对象键的开头引号)
  2. JSON 需要双引号"而不是单引号'来引用标识符。

尝试这个:

data: {
  topost: '{"id":"'+id+'","name":"'+name+'","Address":"'+Address+'"}'
}, 

或者,您可以使用JSON.stringify()对对象文字进行编码:

data: {
  topost: JSON.stringify({id: id, name: name, Address: Address})
}, 

您可以使用 Douglas Crockfords JSON2.js 库为不支持本机的浏览器提供此功能。

于 2012-07-10T14:33:43.423 回答
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", 
  ...
于 2012-07-10T14:34:05.250 回答