我有一张登记表,正在使用$。Ajax来提交。

这是我的AJAX请求:

$(document).ready(function() {
    $("form#regist").submit(function() {
        var str = $("#regist").serialize();
        $.ajax({
            type: 'POST',
            url: 'submit1.php',
            data: $("#regist").serialize(),
            dataType: 'json',
            success: function() {
                $("#loading").append("<h2>you are here</h2>");
            }        
        });
        return false;        
    });
});

在我的submit1.php文件中,我检查了数据库中字段电子邮件地址和用户名的存在。 我希望显示一个错误消息,如果这些值存在而不刷新页面。

我如何将此添加到我的AJAX请求的成功回调?


当前回答

确保在PHP文件中生成JSON格式的数据之前不打印(回显或打印)任何文本/数据。这可以解释,你得到一个-成功200 OK-但你的成功事件仍然失败在你的javascript。可以通过检查firebug中POST submit1.php的“Network - Answer”部分来验证脚本接收的内容。

其他回答

在成功回调中放入alert()以确保它被调用。

如果不是,那只是因为请求根本没有成功,即使您设法击中了服务器。合理的原因可能是超时过期,或者php代码中的某些内容抛出异常。

为firefox安装firebug插件(如果还没有安装的话),并检查AJAX回调。您将能够看到响应,以及它是否收到一个成功的(200 OK)响应。您还可以在完整的回调中放入另一个alert(),它肯定会被调用。

添加'error'回调函数(就像'success'一样):

$.ajax({
   type: 'POST',
   url: 'submit1.php',
   data: $("#regist").serialize(),
   dataType: 'json',
   success: function() {
      $("#loading").append("<h2>you are here</h2>");
   },
   error: function(jqXhr, textStatus, errorMessage){
      console.log("Error: ", errorMessage);
   }
});

以我为例,我在控制台看到:

Error:  SyntaxError: Unexpected end of JSON input
  at parse (<anonymous>), ..., etc.

我使用XML将结果从服务器上的php带回网页,我有相同的行为。

在我的例子中,原因是结束标记与开始标记不匹配。

<?php
....
header("Content-Type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>
    <result>
        <status>$status</status>
        <OPENING_TAG>$message</CLOSING_TAG>
    </result>";
?>

确保在PHP文件中生成JSON格式的数据之前不打印(回显或打印)任何文本/数据。这可以解释,你得到一个-成功200 OK-但你的成功事件仍然失败在你的javascript。可以通过检查firebug中POST submit1.php的“Network - Answer”部分来验证脚本接收的内容。

我正在返回有效的JSON,在我的“完整”回调中得到200的响应,并且可以在chrome网络控制台中看到它…但我没有具体说明

dataType: "json"

一旦我做了,不像“公认的答案”,这实际上解决了问题。