我的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/