代码之家  ›  专栏  ›  技术社区  ›  codingbbq

Ajax成功事件不起作用

  •  171
  • codingbbq  · 技术社区  · 15 年前

    $.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请求?

    15 回复  |  直到 7 年前
        1
  •  410
  •   Tatu Ulmanen    15 年前

    结果可能不是JSON格式的,因此当jQuery尝试将其解析为JSON格式时,它会失败。你可以用计算机捕捉错误 error:

    无论如何,您似乎不需要在该函数中使用JSON,因此您还可以去掉 dataType: 'json' 一行

        2
  •  21
  •   js newbee    14 年前

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

        3
  •  16
  •   Allen    14 年前

    我尝试删除数据类型行,但它对我无效。我通过使用“complete”而不是“success”作为回调来回避这个问题。在IE中,成功回调仍然失败,但由于我的脚本运行并完成,所以我只关心这些。

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

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

        5
  •  5
  •   David Hedlund    15 年前

    alert() 在你的 success 回调以确保它被调用。

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

    警报() complete 回调,它肯定应该被调用。

        6
  •  3
  •   Thusitha Wickramasinghe    9 年前

    我也有同样的问题。因为 javascript json 返回数据中的数据类型。但是如果在php中使用echo或print,就会出现这种情况。如果你使用 echo 作用于 php 要返回数据,只需删除 dataType : "json"

        7
  •  2
  •   Kabir Sarin    11 年前

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

    dataType: "json"
    

    有一次,与“公认的答案”不同,这实际上解决了问题。

        8
  •  2
  •   JeffNhan    5 年前

    您必须同时声明成功和错误回调。添加

    error: function(err) {...} 
    

        9
  •  1
  •   thowa    9 年前

    我使用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>";
    ?>
    
        10
  •  1
  •   Andresa Martins    9 年前

    我在使用ajax函数从Magento恢复用户密码时遇到了这个问题。未触发成功事件,然后我意识到有两个错误:

    1. 我试图将一个数组转换为JSON格式,但是这个数组有非utf字符

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

        11
  •  1
  •   rlandster    8 年前

    var sownum="aa";
    $.ajax({
        type : "POST",
        contentType : 'application/json; charset=utf-8',
        dataType : "JSON",
        url : 'updateSowDetails.html?sownum=' + sownum,
        success : function() {
            alert("Wrong username");
        },
        error : function(request, status, error) {
    
            var val = request.responseText;
            alert("error"+val);
        }
    });
    
        12
  •  1
  •   Malakai ssk    6 年前

    我在查询控制器时遇到了同样的问题,该控制器不返回成功响应,当修改我的控制器以返回成功消息时,问题得到了解决。 注意使用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()
            }
    

        13
  •  1
  •   silkykg    6 年前

    我也遇到了同样的问题,我就是这样解决的: 我的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响应。

    echo 'item';
    

    现在:

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

    注:如果有问题,请道歉,但这是我在这个论坛上的第一个评论:)

        14
  •  0
  •   Emiliano Barboza    7 年前

    在我的例子中,错误是这是在服务器端,因此它返回一个html

    wp_nonce_field(basename(__FILE__), "mu-meta-box-nonce");
    
        15
  •  0
  •   Vlado    6 年前

    通过以下方式添加“错误”回调(就像“成功”):

    $.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.
    
        16
  •  -4
  •   Darin Dimitrov    15 年前

    这个 success callback 接受两个参数:

    success: function (data, textStatus) { }
    

    submit1.php 设置正确的内容类型标题: application/json