簡體   English   中英

Ajax 成功事件不起作用

[英]Ajax success event not working

我有一個注冊表單,正在使用$.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 請求的成功回調中?

結果可能不是 JSON 格式,因此當 jQuery 嘗試解析它時,它失敗了。 您可以使用error:回調函數捕獲錯誤。

無論如何,您似乎不需要該函數中的 JSON,因此您也可以取出dataType: 'json'行。

雖然問題已經解決了,我還是加了這個,希望能幫到其他人。

我犯了一個錯誤,試圖直接使用這樣的函數(成功: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。

我嘗試刪除 dataType 行,但它對我不起作用。 我通過使用“完成”而不是“成功”作為回調來解決這個問題。 成功回調在 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 ... 
    }
});

在 PHP 文件中生成 JSON 格式的數據之前,請確保您沒有打印(回顯或打印)任何文本/數據。 這可以解釋您得到 -sucessfull 200 OK- 但您的成功事件在您的 javascript 中仍然失敗。 您可以通過檢查螢火蟲中 POST submit1.php 的“網絡 - 答案”部分來驗證您的腳本正在接收什么。

在您的success回調中放置一個alert()以確保它被完全調用。

如果不是,那只是因為請求根本沒有成功,即使您設法訪問了服務器。 合理的原因可能是超時到期,或者您的 php 代碼中的某些內容引發了異常。

如果您還沒有安裝 firefox 的 firebug 插件,請檢查 AJAX 回調。 您將能夠看到響應,以及它是否收到成功的 (200 OK) 響應。 您還可以在complete回調中放置另一個alert() ,它絕對應該被調用。

我有同樣的問題。 發生這種情況是因為javascript期望在返回數據時使用json數據類型。 但是如果您在 php 中使用 echo 或 print 會發生這種情況。 如果您在php使用echo函數返回數據,只需刪除dataType : "json"工作得很好。

我正在返回有效的 JSON,在我的“完整”回調中得到 200 的響應,並且可以在 chrome 網絡控制台中看到它......但我沒有指定

dataType: "json"

一旦我這樣做了,與“接受的答案”不同,實際上解決了問題。

您必須同時聲明成功和錯誤回調。 添加

error: function(err) {...} 

應該解決問題

我正在使用 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 函數從 Magento 恢復用戶密碼時遇到了這個問題。 成功事件沒有被觸發,然后我意識到有兩個錯誤:

  1. 結果未以 JSON 格式返回
  2. 我試圖將數組轉換為 JSON 格式,但該數組具有非 utf 字符

因此,每次我嘗試使用 json_eoncde() 對返回的數組進行編碼時,該函數都無法正常工作,因為其索引之一具有非 utf 字符,其中大多數是巴西葡萄牙語單詞的重音。

我試圖從控制器返回字符串,但為什么控制返回到錯誤塊的 ajax 沒有成功

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);
    }
});

我在查詢不返回成功響應的控制器時遇到了同樣的問題,當修改我的控制器以返回成功消息時問題得到解決。 注意使用 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()
        }

這對我有用

我遇到了同樣的問題,我以這種方式解決了它:我的 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);

現在我的成功工作。 附注。 對不起,如果有什么問題,但這是我在這個論壇上的第一條評論:)

在我的情況下,錯誤是在服務器端,因此它返回一個 html

wp_nonce_field(basename(__FILE__), "mu-meta-box-nonce");

以這種方式添加“錯誤”回調(就像“成功”一樣):

$.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.

成功回調有兩個參數:

success: function (data, textStatus) { }

還要確保submit1.php設置了正確的內容類型標頭: application/json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM