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


当前回答

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

其他回答

我尝试删除dataType行,但它没有为我工作。我通过使用“complete”而不是“success”作为回调函数来解决这个问题。成功回调仍然失败在IE,但因为我的脚本运行和完成无论如何,这是我所关心的。

$.ajax({
    type: 'POST',
    url: 'somescript.php',
    data: someData,
    complete: function(jqXHR) {
       if(jqXHR.readyState === 4) {
          ... run some code ... 
       }   
    }        
 });

在jQuery 1.5中你也可以这样做。

var ajax = $.ajax({
    type: 'POST',
    url: 'somescript.php',
    data: 'someData'
});
ajax.complete(function(jqXHR){
    if(jqXHR.readyState === 4) {
        ... run some code ... 
    }
});

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

dataType: "json"

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

添加'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.

当查询控制器不返回成功响应时,我也遇到了同样的问题,当修改控制器以返回成功消息时,问题得到了解决。 注意使用Lavalite框架。 之前:

public function Activity($id)
    {
        $data=getData();
        return
            $this->response->title('title')
                ->layout('layout')
                ->data(compact('data'))
                ->view('view')
                ->output();
    }
after code looks like:
    try {
            $attributes = $request->all();
            //do something
            return $this->response->message('')
                ->code(204)
                ->status('success')
                ->url('url'. $data->id)
                ->redirect();
        } catch (Exception $e) {
            return $this->response->message($e->getMessage())
                ->code(400)
                ->status('error')
                ->url('nothing Wrong')
                ->redirect()
        }

这对我很有效

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

我犯了一个错误,试图直接使用这样的函数(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也会被调用。