Javascript JQuery ajax无法使用数据参数发布
我正在尝试使用JQuery Ajax发布一个简单的联系人表单,使用PHP作为处理程序:Javascript JQuery ajax无法使用数据参数发布,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,我正在尝试使用JQuery Ajax发布一个简单的联系人表单,使用PHP作为处理程序: alert("Form submitted successfully.\nReturned json:\n" + JSON.stringify(data)); Index.html <form name="signup-form" method="post" accept-charset="utf-8" class="signup-form"> <input class="sign
alert("Form submitted successfully.\nReturned json:\n" + JSON.stringify(data));
Index.html
<form name="signup-form" method="post" accept-charset="utf-8" class="signup-form">
<input class="signup-input" type="email" name="email_address" value="" placeholder="enter your email..." title="Please enter a valid email address." required>
<input type="submit" class="submit-btn" value="GO"/>
</form>
alert("Form submitted successfully.\nReturned json:\n" + JSON.stringify(data));
编辑的PHP-server.PHP
<?php
header('Access-Control-Allow-Origin: *');
if (is_ajax()) {
if (isset($_POST["action"]) && !empty($_POST["action"])) { //Checks if action value exists
$action = $_POST["action"];
switch($action) { //Switch case for value of action
case "test": test_function(); break;
}
}
}
//Function to check if the request is an AJAX request
function is_ajax() {
return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
}
function test_function(){
header("Content-Type: application/json");
echo json_encode($_POST);
}
alert("Form submitted successfully.\nReturned json:\n" + JSON.stringify(data));
我不确定您到底想做什么,但有一点很明显,您的PHP代码返回了一个嵌套对象
{email_address: "{"email_address":"asdf@asdf.org","action":"test"}", action: "test"}
alert("Form submitted successfully.\nReturned json:\n" + JSON.stringify(data));
这就是您的JSON在返回时的样子。如果只想将$\u POST数据吐回浏览器,只需执行以下操作:
function test_function(){
echo json_encode($_POST);
}
alert("Form submitted successfully.\nReturned json:\n" + JSON.stringify(data));
然后在JS端的成功方法中修改您的警报:
alert("Form submitted successfully.\nReturned json:\n" + JSON.stringify(data));
还有一件事,在php代码中设置内容类型头是一个非常好的主意,可能是在您检查X-Requested-With之后,但在您向浏览器吐出任何数据之前:
alert("Form submitted successfully.\nReturned json:\n" + JSON.stringify(data));
header('Content-type: application/json');
我找到了它不起作用的原因
alert("Form submitted successfully.\nReturned json:\n" + JSON.stringify(data));
您的是\u ajax()
检查此$\u服务器['HTTP\u X\u REQUESTED\u WITH']
,如果您使用的是CORS,则不会设置此服务器。因此,一个简单的解决方法就是禁用此检查
alert("Form submitted successfully.\nReturned json:\n" + JSON.stringify(data));
<?php
header('Access-Control-Allow-Origin: *');
header("Content-Type: application/json");
//print_r($_SERVER);
if (isset($_POST["action"]) && !empty($_POST["action"])) { //Checks if action value exists
$action = $_POST["action"];
switch($action) { //Switch case for value of action
case "test": test_function(); break;
}
}
function is_ajax() {
return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
}
function test_function(){
$return = $_POST;
//$return["email_address"] = json_encode($return);
echo json_encode($return);
exit;
}
看起来您根本没有输出JSON(在Inspector中检查您的响应)。我知道,即使我对发布的输出进行了JSON\u编码,dataType
也会注意到它的返回类型“XHR”。dataType
是您期望从服务器返回的数据类型。我认为您还应该放置JSON头:header('Content-Type:application/JSON')代码>关注PHP,您的javascript很好。问题不在于jQuery,而很可能是PHP代码发送的响应。此外,检查$\u服务器['HTTP\u X\u REQUESTED\u with']
也不是100%可靠的。既然您已经检查了$\u POST[“action”]
,您可以添加AJAX标志(如GET或POST)。在我这里的用例中,我可以设置标题('Content-type:application/json')在我吐回$\u POST
数据之前,代码>就在我的test\u函数中,因为我仍然收到相同的错误?只要你在调用test\u函数之前没有向屏幕回显任何内容,那么它就不会给你错误。也就是说,我猜最终您将添加其他方法来完成实际有用的工作,并且所有这些方法都希望设置content-type标头,以便在确定您已收到XHR请求后进行设置更有意义。正如其他人指出的,这并不总是存在的,但是jQueryAjax应该总是设置它。我已经删除了它。您可以发布您正在运行的完整php代码段吗?这是完整的代码段。确保server.php是可访问的,并且位于您期望的位置。您可以首先编辑server.php以回显“hello world”或其他内容,然后访问远程URL以查看它是否确实是正确的文件。为了重现我的运行方式,我基本上使用xampp在htdocs位置创建了该文件server.php
,并在javascript文件中直接指向它。文件被找到了,否则我会收到404错误,它仍然不工作吗?您的主机服务器是否可能阻止CORS?尝试添加一个.htaccess
文件,包括标题集访问控制允许原点“*”
。哦,你是在自己的电脑上测试这个吗?您是否转发了端口以便可以使用外部IP进行测试?在我尝试使其正常工作时,一切都是本地的。server.php文件引用自运行localhost的htdocs