【问题标题】:Why is this ajax call to the correct php script not returning anything?为什么这个对正确 php 脚本的 ajax 调用没有返回任何内容?
【发布时间】:2011-08-10 23:10:18
【问题描述】:

我有这个 AJAX:

function sendMail () {
        $.post('php/sendMail.php', function(result){
            alert(result);
        })
    }

$('#submitContact').click(function(){
        sendMail();
    })

还有这个 PHP:

<?php

$trimmed = array_map('trim', $_POST);

$message = $trimmed['message'];
$email = $trimmed['email'];
$name = $trimmed['name'];

if (empty($message)) {
    $message = FALSE;
}

if (empty($email)) {
    $message = FALSE;
}

if (empty($name)) {
    $message = FALSE;
}

if ($message && $email && $name){

    $body = "From: $name.\n \n $message";

    mail(/*some email*/, 'Website Contact Form Submission', $body, "From: $email");

    echo ('success');

}

echo($message.' '.$email.' '.$name);

?>

所有定义的 html 元素都存在。当我运行它时,返回的是一个空白的警告框(意味着 PHP 脚本没有打印成功)。知道为什么它不发送邮件吗?

【问题讨论】:

  • 使用 firebug(如果您使用 FF)、开发者工具(如果您使用 chrome 或其他合适的工具来调试您的 http 请求)。

标签: php javascript jquery ajax


【解决方案1】:

您的POST 似乎没有发送任何数据。

如果您尝试提交表单,请尝试以下操作:

$.post('php/sendMail.php',$('form').serialize(), function(result){
        alert(result);
    })

编辑:正如 Tomalak 在 cmets 中正确指出的那样,您需要指定要序列化的表单。我通常会给表单一个 id 并使用它:- $('#myform').serialize()

【讨论】:

  • 你要序列化哪种形式?
  • @Tomalak 我不知道,HTML 不可用。这只是一个例子——我会用一个 ID 代替“表单”。
  • 在答案中可能值得一提! :)
【解决方案2】:

您没有向该 URL 发送任何数据。

【讨论】:

    【解决方案3】:

    您看到空警报框的原因是 $email$name 是空的,因为您没有传递任何 $_POST 变量。
    当您回显时,$message = FALSE 是空白的。
    尝试更改此行

    echo($message.' '.$email.' '.$name);
    

    var_dump($message.' '.$email.' '.$name);
    

    你会看到$message.' '.$email.' '.$name的值。

    【讨论】:

      【解决方案4】:

      知道为什么它不发送邮件吗?

      简单地说,你没有要求它


      $.post 的语法是:

      jQuery.post( url, [data,] [success(data, textStatus, jqXHR),] [dataType] )

      按照 jQuery 的工作方式,您可以跳过data 参数并仍然提供以下参数,但在这种情况下,您根本没有传递任何数据供您的 PHP 脚本使用。

      假设#submitContact 是您要提交的表单中的一个按钮,您应该序列化该表单的内容并将其作为POST 数据发送:

      function sendMail($form) {
          $.post('php/sendMail.php', $form.serialize(), function(result) {
              alert(result);
          });
      }
      
      var $btn = $('#submitContact');
      var $frm = $btn.parents('form');
      $btn.click(function() {
          sendMail($frm);
      });
      

      The documentation is your friend. Use it.


      注意:我的一些变量开头的 $ 是故意的;我的代码中 jQuery 对象的名称以 $ 开头是个人选择。)

      【讨论】:

        猜你喜欢
        • 2012-10-25
        • 2020-01-27
        • 2011-06-23
        • 2019-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-18
        相关资源
        最近更新 更多