我正在尝试将表单数据发送到php脚本,但是该脚本未接收到数据。
我不明白为什么,JavaScript应该可以,PHP应该可以。
就在ajax请求之前测试数据会显示结果,但是从服务器端检查POST数据将返回空。
这是我的ajax代码:
var request = $.ajax({
method: "POST",
url: 'contact-mail.php',
data: { nume: nume.value, telefon: telefon.value, email: email.value, message: message.value},
error: function(err, status) { console.log("error contact " + err);}
});
request.done(function(msg) {
alert(msg);
document.querySelectorAll(".sdc-cardboard-form input").forEach(input => {
input.value = "";
});
});
request.fail(function( jqXHR, textStatus ) {
alert( "Request failed: " + textStatus );
});
这是我在PHP脚本中获取数据的方式:
$name = $_POST['nume'];
$name = addslashes($name);
$tel = $_POST['telefon'];
$tel = addslashes($tel);
$email = $_POST['email'];
$email = addslashes($email);
$message = $_POST['message'];
$message = addslashes($message);
echo "Server side: ".$name." ".$tel." ".$email." ".$message;
Echo仅返回“服务器端:”部分。
我正在使用相同的方法将数据发送到另一个网站上的服务器。
有人看到我的代码有任何错误吗?有什么我想念的吗?
jQuery 3+
PHP 7.2
更新,问题。可能是htaccess重写规则会从.php开始削减所有内容吗?
这是我的htaccess重写规则:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]
## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
我对htacess的阅读不多,所以我只是在猜测。
答案 0 :(得分:1)
由于您正在使用mod-rewrite重定向文件扩展名,因此您需要在AJAX请求中执行此操作。更改:
url: 'contact-mail.php',
到
url: 'contact-mail',
答案 1 :(得分:1)
由于.htaccess重写规则(Apache mod_rewrite:https://httpd.apache.org/docs/2.4/rewrite/intro.html),那些PHP文件的所有URL都会被更新
表示 example.com/test.php 将是 example.com/test
这就是为什么您的AJAX请求找不到URL并给您错误的原因。
url: 'contact-mail.php'
应该是
url: 'contact-mail'
请检查是否可行。如果它不起作用,请回复或评论。