AJAX帖子调用php脚本无法正常工作

时间:2014-02-10 23:22:56

标签: php jquery ajax post

我无法理解为什么以下不起作用,我试图调用一个PHP脚本发送电子邮件,但我不认为我的ajax调用是在调用php脚本,我只是得到一个错误返回。

我的ajax电话:

        var name_field = $('#cf_name').val();
        $.ajax({
            type: 'post',
            url: 'contact.php',
            data: {'name_field' : name_field },
            dataType: 'json',
            success: function(data) {
                if(data.status == 'success')
                    alert("Thank you for subscribing!");
                else if(data.status == 'error')
                    alert("Error on query!");
            },
            error: function(err) {
                alert(err.responseText);
            }
        });

我的php脚本:

$field_name =  isset($_POST['name_field']);
$field_email = 'name@email.com';
$field_phone = '12345';
$field_message = 'Hello World!';

$mail_to = 'emailaddress@email.com';
$subject = 'Message from a website visitor '.$field_name;

$body_message = 'This message has been sent via website:'."\n\n";
$body_message .= 'From: '.$field_name."\n\n";
$body_message .= 'E-mail: '.$field_email."\n\n";
$body_message .= 'Phone Number: '.$field_phone."\n\n";
$body_message .= 'Message: '.$field_message;

$headers = 'From: '.$field_email."\r\n";
$headers .= 'Reply-To: '.$field_email."\r\n";

$mail_status = mail($mail_to, $subject, $body_message, $headers);

if ($mail_status) { 
    $response_array['status'] = 'success';  
}
else { 
    $response_array['status'] = 'error';
}
header('Content-type: application/json');
echo json_encode($response_array);

如果我直接导​​航到网址,那么php会按预期工作,但我无法获得ajax帖子来调用它。

3 个答案:

答案 0 :(得分:1)

$ field_name不是实际的字符串,因为你使用了$ field_name = isset($ _ POST [name_field']),所以它是一个布尔值。删除isset()。

答案 1 :(得分:0)

您应该检查url: contact.php,因为您没有指定完整的网址,因此您的帖子将转到相对路径。根路径将是相同的当前脚本路径。

答案 2 :(得分:0)

看到这个:jQuery Ajax post cancelled我不是js专家,但我同意你的问题是你的ajax调用的异步执行,因为发送电子邮件需要一段时间,可能没有及时完成为你的js

在ajax调用中看到关于“异步”属性的这个很好的解释:

What does "async: false" do in jQuery.ajax()?

看到这个问题/答案:

How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?