我有一张登记表,正在使用$。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请求的成功回调?


当前回答

我有这个问题使用ajax函数从Magento恢复用户密码。成功事件没有被解雇,然后我意识到有两个错误:

结果没有以JSON格式返回 我试图将数组转换为JSON格式,但这个数组有非utf字符

因此,每次我尝试使用json_eoncde()来编码返回数组时,该函数都无法工作,因为它的一个索引具有非utf字符,其中大多数是巴西葡萄牙语单词的重音。

其他回答

虽然这个问题已经解决了,但我还是希望它能帮助到其他人。

我犯了一个错误,试图直接使用这样的函数(success: OnSuccess(productID))。但是你必须先传递一个匿名函数:

  function callWebService(cartObject) {

    $.ajax({
      type: "POST",
      url: "http://localhost/AspNetWebService.asmx/YourMethodName",
      data: cartObject,
      contentType: "application/x-www-form-urlencoded",
      dataType: "html",
      success: function () {
        OnSuccess(cartObject.productID)
      },
      error: function () {
        OnError(cartObject.productID)
      },
      complete: function () {
        // Handle the complete event
        alert("ajax completed " + cartObject.productID);
      }
    });  // end Ajax        
    return false;
  }

如果你不使用匿名函数作为包装器,即使web服务返回异常,OnSuccess也会被调用。

success回调函数有两个参数:

success: function (data, textStatus) { }

还要确保submit1.php设置了正确的内容类型头:application/json

我使用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>";
?>

我遇到了同样的问题,我用这种方法解决了它: 我的ajax:

event.preventDefault();
$.ajax('file.php', {
method: 'POST',
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify({tab}), 
success: function(php_response){
            if (php_response == 'item') 
                {
                    console.log('it works');
                }
            }
        })

好的。问题不在于json,而在于php响应。 之前:我的php回答是:

echo 'item';

现在:

$variable = 'item';
 echo json.encode($variable);

现在我的成功工作。 PS.如果有什么地方不对,我很抱歉,但这是我在这个论坛上的第一个评论:)

必须同时声明Success和Error回调。添加

error: function(err) {...} 

应该能解决问题