【问题标题】:AJAX post call to php script not working对 php 脚本的 AJAX 后调用不起作用
【发布时间】:2014-03-08 12:56:17
【问题描述】:

我不明白为什么以下不起作用,我正在尝试调用 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);

如果我直接导​​航到 url,php 会按预期工作,但我无法让 ajax 帖子调用它。

【问题讨论】:

  • 当您尝试使用 ajax 时会发生什么?你真的到了 ajax 行吗?你到达成功功能了吗?你得到错误函数了吗?
  • 使用 devtools 在网络选项卡 (firebug/fox/chrome) 中查看 ajax 请求的状态,看看是否有帮助或将结果粘贴到您的问题中,也尝试使用绝对 URL,如果您收到 404,则您的网址不正确。
  • 我肯定遇到了来自 ajax 调用的错误响应。虽然 err.responseText 是空的。
  • devtools 网络选项卡 - 响应已(取消)??
  • 但是,实际上是您的 ajax 调用到达了您的 php 脚本?如果服务器端(php)出现问题,您将在 devtool 的网络选项卡中的请求响应中看到 500 状态代码,如果您看到 404,您甚至没有到达您的脚本,如果您得到200 响应,那么你就成功了。

标签: php jquery ajax post


【解决方案1】:

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

【讨论】:

  • 谢谢,这不是问题,但绝对是问题,谢谢。
  • 哦,我在我的服务器上尝试了你的代码,它运行良好。我没有收到任何错误。 shadeoftruth.com看看。
【解决方案2】:

请参阅: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?

【讨论】:

  • 感谢您的帮助!
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多