Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php表单ajax“;成功与挑战;失败;消息_Php_Ajax_Forms - Fatal编程技术网

Php表单ajax“;成功与挑战;失败;消息

Php表单ajax“;成功与挑战;失败;消息,php,ajax,forms,Php,Ajax,Forms,我网站上的表格是一个简单的联系表格。 我希望表单在发送/失败时在同一页面上显示“success&failed”消息,而不重新加载页面。我知道我应该使用Ajax来做这件事,但我无法让它工作,因为我对它的了解很少 这是我正在使用的代码 Html(单页设计): 纳姆* 电子邮件* 电传 梅德兰德* 斯奇卡 $(函数(){ $(#contactus')。提交(功能(事件){ event.preventDefault(); event.returnValue=false; $.ajax({ 键入:“PO

我网站上的表格是一个简单的联系表格。 我希望表单在发送/失败时在同一页面上显示“success&failed”消息,而不重新加载页面。我知道我应该使用Ajax来做这件事,但我无法让它工作,因为我对它的了解很少

这是我正在使用的代码

Html(单页设计):


纳姆*
电子邮件*
电传
梅德兰德*
斯奇卡 $(函数(){ $(#contactus')。提交(功能(事件){ event.preventDefault(); event.returnValue=false; $.ajax({ 键入:“POST”, url:'php/mail.php', 数据:$('#contactus')。序列化(), 成功:功能(res){警报(res); 如果(res=='successful'){ $('#status').html('Sent').slideDown(); } 否则{ $('#status').html('Failed').slideDown(); } }, 错误:函数(){ $('#status').html('Failed').slideDown(); } }); }); });
Php:


在php脚本中,您可以尝试以下操作

if(mail($recipient, $subject, $formcontent, $mailheaders))
{
  echo("Mail Sent Successfully"); // or echo(successful) in your case
}else{
  echo("Mail Not Sent"); // or die("Ett fel uppstod!");

}

在php脚本中,您可以尝试以下操作

if(mail($recipient, $subject, $formcontent, $mailheaders))
{
  echo("Mail Sent Successfully"); // or echo(successful) in your case
}else{
  echo("Mail Not Sent"); // or die("Ett fel uppstod!");

}

按如下方式更改您的PHP脚本:

<?php
if( isset( $_POST['submit'] )){ //checking if form was submitted
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$formcontent="Meddelande: \n\n $message";
$recipient = "info@mydomain.com";
$subject = "Webbkontakt";
$mailheader = "Från: $name \n Email: $email \n Telefon: $phone \r\n";

$mailsent = mail($recipient, $subject, $formcontent, $mailheader);

if($mailsent) echo "Success"; //success if mail was sent
else echo "Ett fel uppstod!";
}
?>

如下更改您的PHP脚本:

<?php
if( isset( $_POST['submit'] )){ //checking if form was submitted
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$formcontent="Meddelande: \n\n $message";
$recipient = "info@mydomain.com";
$subject = "Webbkontakt";
$mailheader = "Från: $name \n Email: $email \n Telefon: $phone \r\n";

$mailsent = mail($recipient, $subject, $formcontent, $mailheader);

if($mailsent) echo "Success"; //success if mail was sent
else echo "Ett fel uppstod!";
}
?>

在您的
mail()
函数下面,只需执行
回显“成功”

在您的
mail()
函数下面,只需执行
echo“successful”

2020编辑 在REST中,API响应应该始终伴随着正确的HTTP状态代码,200+告诉客户机请求得到了正确处理或处理良好,400+告诉客户机请求中有错误,500+告诉客户机服务器本身有问题。不要在响应中使用状态,这是对现有功能的不必要复制:

http\u响应码(200);
echo json_encode(['message'=>'电子邮件已发送']);
出口
然后,您可以使用jQuery处理请求和响应(假设您仍然使用jQuery):

$.ajax({
url:url,
数据:数据,
数据类型:“json”
})
.then(函数(数据、文本状态、jqXHR){
//您的200多个回复将在这里着陆
})
.fail(函数(jqXHR、textStatus、errorshown){
//您的400多个响应将被此处理程序捕获
});
;
如果您需要特定的状态,可以使用
jqXHR.status
字段从
jqXHR
参数获取

原始答案 您可以在
ajax
调用中使用
dataType:'json'

然后,您可以将状态代码作为响应键传递:

// form response array, consider it was success
$response = array( 'success'=> 'ok', 'message' => 'Email was sent');

echo json_encode($response);
在js中,您可以查看
data.success==“ok”
以了解您的状态。

在REST中,API响应应该始终伴随着正确的HTTP状态代码,200+告诉客户机请求得到了正确处理或处理良好,400+告诉客户机请求中有错误,500+告诉客户机服务器本身有问题。不要在响应中使用状态,这是对现有功能的不必要复制:

http\u响应码(200);
echo json_encode(['message'=>'电子邮件已发送']);
出口
然后,您可以使用jQuery处理请求和响应(假设您仍然使用jQuery):

$.ajax({
url:url,
数据:数据,
数据类型:“json”
})
.then(函数(数据、文本状态、jqXHR){
//您的200多个回复将在这里着陆
})
.fail(函数(jqXHR、textStatus、errorshown){
//您的400多个响应将被此处理程序捕获
});
;
如果您需要特定的状态,可以使用
jqXHR.status
字段从
jqXHR
参数获取

原始答案 您可以在
ajax
调用中使用
dataType:'json'

然后,您可以将状态代码作为响应键传递:

// form response array, consider it was success
$response = array( 'success'=> 'ok', 'message' => 'Email was sent');

echo json_encode($response);

在js中,您可以检查
data.success==“ok”
以了解您的状态。

您的
Ajax
调用工作不正常。试试这个

$(function() {
            $('#contactus').submit(function (event) {
                event.preventDefault();
                event.returnValue = false;
                $.ajax({
                    type: 'POST',
                    url: 'php/mail.php',
                    data: $('#contactus').serialize(),
                    success: function(res) {
                        if (res == 'successful') {
                            $('#status').html('Sent').slideDown();
                        }
                        else {
                            $('#status').html('Failed').slideDown();
                        } 
                    },
                    error: function () {
                        $('#status').html('Failed').slideDown();
                    }
                });
            });
        });
您也可以看到,我使用了
$(“#contactus”).serialize()
这种方式您不需要逐个传递表单元素,而是
serialize()
将整个表单元素传递到您的php页面

如果一切顺利,则在php文件中
echo
成功
如果响应是
错误
,则显示
错误div

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $message = $_POST['message'];
    $recipient = "info@mydomain.com";
    $subject = "Webbkontakt";
    $formcontent = "Från: $name <br/> Email: $email <br/> Telefon: $phone <br/> Meddelande: $message";

    $headers = "From: " ."CAMAXON<info@mydomain.com>" . "\r\n";
    $headers .= "Reply-To: ". "no-reply@mydomain.com" . "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

    if(mail($recipient, $subject, $formcontent, $headers))
    {
        echo "successful";
    }
    else
    {
        echo "error";
    }
?>

您的
Ajax
调用工作不正常。试试这个

$(function() {
            $('#contactus').submit(function (event) {
                event.preventDefault();
                event.returnValue = false;
                $.ajax({
                    type: 'POST',
                    url: 'php/mail.php',
                    data: $('#contactus').serialize(),
                    success: function(res) {
                        if (res == 'successful') {
                            $('#status').html('Sent').slideDown();
                        }
                        else {
                            $('#status').html('Failed').slideDown();
                        } 
                    },
                    error: function () {
                        $('#status').html('Failed').slideDown();
                    }
                });
            });
        });
您也可以看到,我使用了
$(“#contactus”).serialize()
这种方式您不需要逐个传递表单元素,而是
serialize()
将整个表单元素传递到您的php页面

如果一切顺利,则在php文件中
echo
成功
如果响应是
错误
,则显示
错误div

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $message = $_POST['message'];
    $recipient = "info@mydomain.com";
    $subject = "Webbkontakt";
    $formcontent = "Från: $name <br/> Email: $email <br/> Telefon: $phone <br/> Meddelande: $message";

    $headers = "From: " ."CAMAXON<info@mydomain.com>" . "\r\n";
    $headers .= "Reply-To: ". "no-reply@mydomain.com" . "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

    if(mail($recipient, $subject, $formcontent, $headers))
    {
        echo "successful";
    }
    else
    {
        echo "error";
    }
?>


ajaax使用http状态代码来确定成功/失败。如果要在ajax代码中触发“error:”路径,则必须返回4xx或5xx http状态代码。现在您正在输出一个没有主体的
200OK
,或者(仍然)输出一个主体为“Ett fall uppstod”的200OK。对于ajax系统来说,这两种方法都不是失败的
要满足
如果(数据=='successful')
你能给我