【问题标题】:jQuery - Why is the Ajax() error callback always called?jQuery - 为什么总是调用 Ajax() 错误回调?
【发布时间】:2011-05-29 04:23:02
【问题描述】:

我正在尝试将确认 JSON 对象返回给我的 AJAX 函数。出于某种原因,即使发布成功(200)错误回调函数总是被调用。我正在将返回的 JSON 记录到一个文件中进行配音,它看起来是正确的。我无法弄清楚为什么会这样。有人可以提供建议吗?

PHP 控制器动作 (CI):

public function sendMail()
    {
        $senderName = trim($_POST['senderName']);
        $returnEmail = trim($_POST['returnEmail']);
        $message = trim($_POST['message']);


        if (valid_email($returnEmail))
        {
            send_email('email@email.com','Website Email From: '.$senderName, $message);
            $success = array('success'=>'Mail Sent');

            //Debugging to file
            $myFile = "testFile.txt";
            $fh = fopen($myFile, 'w') or die("can't open file");
            $stringData = json_encode($success);
            fwrite($fh, $stringData);
            fclose($fh);


            echo json_encode($success);
        }
        else
        {
            $errorMessage = array('error'=>'Invalid Email Address');
            echo json_encode($errorMessage);
        }
    }

}

JS:

$.ajax({
                   type: "POST",
                   url: "http://domain.com/index.php/mail/sendmail",
                   data: {senderName: senderName, returnEmail: senderAddr, message: message },
                   dataType: "JSON",
                   success: function(msg){
                     console.log(msg);
                   },
                   error: function(data){
                        alert("Something went wrong"); // possible that JSON wasn't returned
                    }
                 });

【问题讨论】:

    标签: php jquery codeigniter


    【解决方案1】:

    问题是我没有使用相对 url 作为目标。我相信这个问题是一个跨域脚本问题。我将 url 属性更改为 index.php/mail/sendmail,一切都很好。

    $.ajax({
                   type: "POST",
                   url: "index.php/mail/sendmail",
                   data: {senderName: senderName, returnEmail: senderAddr, message: message },
                   dataType: "JSON",
                   success: function(msg){
                     console.log(msg);
                   },
                   error:function (xhr, ajaxOptions, thrownError){
                        var x = xhr;
                        var y = ajaxOptions;
                        var z = thrownError;
                    }
                 });
    

    【讨论】:

      【解决方案2】:

      error 回调最多需要三个 参数:XHR 对象、错误字符串和可选的异常对象。也接受最后两个,他们应该会告诉你发生了什么。

      您可能还想使用 Firebug、Dragonfly 等调试器或 Chrome 的开发人员工具来查看请求是否如您想象的那样成功。

      【讨论】:

      • 我使用 firebug.. 我知道帖子正在运行,因为在这种情况下,电子邮件已发送。我将查看 XHR 对象以获取提示。谢谢
      • 不幸.. XHR 对象只显示一个 statusText = error
      • statusreadyStateresponseText 呢?您还可以尝试使用 Firebug 和 jQuery 的开发副本逐步执行实际请求。
      • ReadyState = 0, status = 0, responseText = "" 不是很有帮助.. 我想我可以通过 jQuery 实现.. 希望它不会出现。
      • 哦,等等,Firebug 对 ajax 请求说了什么?收到电子邮件并不一定意味着回复是正确的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      相关资源
      最近更新 更多