解析JSON字符串时,PHP中出现未定义的索引错误


Undefined index error in PHP when parsing JSON string

我的HTML文件如下:

<script>
$(document).ready(function () {
   $("#btn").click( function() {
     var id = $('#id').val();
     var name =  $('#name').val();
     var Address = $('#Address').val();
     $.ajax({
        url: "http://localhost/connection.php",
        type: "POST",
        data : { topost: JSON.stringify({id: id, name: name, Address: Address}) },
        //I ASSUME HERE IM PASSING MY THREE FIELDS id, name and Address 
        //IN A STRING CALLED 'TOPOST' TO MY FILE CONNECTION.PHP
        //WHICH IS HOSTED ON MY LOCALHOST, IM USING XAMPP.
        datatype: "jsonp",
        success: function (status) {
            if (status.success == false) {
                alert("Failure!");
            }
            else {
                alert("Success!");
            }
        }
     });
     return false;
   });
});
</script>

现在,在托管在本地主机上的文件connection.php中,我正在尝试读取这三个字段,以便我可以把这三个都放在一个数据库(MySQL)中。

然而,我得到的错误是:

Connected to database!<br />
<b>Notice</b>:  Undefined index: topost in <b>C:'xampp'htdocs'connection.php</b> on line <b>27</b><br />
<br />
<b>Notice</b>:  Undefined index: topost in <b>C:'xampp'htdocs'connection.php</b> on line <b>29</b><br />

我的问题是:

为什么"拓扑"未定义?我如何让connection.php理解我在一个名为"topost"的变量中从HTML文件发送JSON数据?

因此,请浏览下面的PHP文件,并提出错误建议。

服务器端PHP文件:

<?php
    header('Content-type: application/json');
    header('Access-Control-Allow-Origin: *');
    $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);
    $posteddata = $_POST['topost'];
    $thedata= json_decode($_POST['topost']);
    echo ($thedata);
    mysql_close();
?>

您的POST主体需要进行url编码,而不是JSON格式。请参阅以下问题:

Javascript对象的查询字符串编码

以下是更多信息和POST主体的示例:

http://www.jmarshall.com/easy/http/#postmethod

因此,在您的情况下,您的代码应该如下所示:

$.ajax({
    url: "http://localhost/connection.php",
    type: "POST",
    data: $.param({
        topost: encodeURIComponent(
            JSON.stringify({id: id, name: name, Address: Address})
        )
    });
    datatype: "jsonp",
    success: function (status) {
        if (status.success == false) {
            alert("Failure!");
        } else {
            alert("Success!");
        }
    }
});

另外注意:您将指定"jsonp"作为数据类型,这意味着您的脚本应该将对象响应封装在与jsonp工作方式一致的函数调用中。另一种选择是在PHP响应中添加CORS头(Access Control Allow Origin),以便在支持Origin检查CORS的浏览器中允许XMLHttpRequest连接到它。

有关JSONP数据类型的更多信息,请参阅jQuery.ajax()文档:http://api.jquery.com/jQuery.ajax/