2013-06-28 59 views
0

我正在嘗試處理來自jQuery的ajax調用的響應正文,但迄今爲止沒有成功。jQuery ajax():無法處理響應

這裏是我的jQuery代碼:

function doAjaxClosedStatus(url, requestId, closedStatusId) { 
$.ajax({ 
    type: "POST", 
    url : url+requestId, 
    data : ({ 
     'closedStatusId' : closedStatusId 
    }) 
}).success(function(msg) { 
    alert(msg); 
    if (msg == "fail") { 
     alert("test"); 
     $(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>')); 
     $('option:selected', '.closedStatus ').removeAttr('selected'); 
     $('.closedStatus option:first-child').prop('selected', 'selected'); 
    } 
}); 

}

所以整個呼叫和服務器端的處理工作就像一個魅力,並用「完成」或「失敗」,分別時,一切響應是對還是錯(我知道你猜對了)。現在我想做一些客戶端處理,當迴應是失敗,但alert(msg)從未觸發... 我在做什麼錯了?

編輯:我忘記說了,我在使用Spring MVC作爲後端和我只是在「失敗」爲@ResponseBody。當我檢查網絡流時,響應主體是「失敗」或「完成」。

EDIT2:我試着用:

$.ajax({ 
    type: "POST", 
    url : url+requestId, 
    data : ({ 
     'closedStatusId' : closedStatusId 
    }), 
    success:function(msg) { 
     alert(msg); 
     if (msg == "fail") { 
      alert("test"); 
      $(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>')); 
      $('option:selected', '.closedStatus ').removeAttr('selected'); 
      $('.closedStatus option:first-child').prop('selected', 'selected'); 
     } 
    } 
}); 

仍然沒有成功...

EDIT3: 所以我一直試圖再次這樣:

function doAjaxClosedStatus(url, requestId, closedStatusId) { 
$.ajax({ 
    type: "POST", 
    url : url+requestId, 
    data : ({ 
     'closedStatusId' : closedStatusId 
    }), 
    success:function(msg) { 
     alert(msg); 
     if (msg == "fail") { 
      alert("test"); 
      $(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>')); 
      $('option:selected', '.closedStatus ').removeAttr('selected'); 
      $('.closedStatus option:first-child').prop('selected', 'selected'); 
     } 
    } 
}); 

}

由於某種原因,它現在可以工作。也許這是因爲我的瀏覽器的緩存沒有被清空,因此與我的腳本的舊版本工作。無論如何,現在這是正常工作。除了我的DOM操作,但這不屬於問題本身,所以主題關閉!感謝大家!

+0

<<也許這是因爲我的瀏覽器的緩存不被清空>>這可以解釋一切;) –

+0

^^^^^發生在我們身上的所有,發佈它作爲自己的回答 - >「愚蠢我沒有擊中CTRL-F5「,並接受它,你會得到更多的代表。 – adeneo

回答

2

你不能鏈success,它的內$就一個方法,你可能在想的done()

function doAjaxClosedStatus(url, requestId, closedStatusId) { 
    $.ajax({ 
     type: "POST", 
     url : url+requestId, 
     data : {closedStatusId : closedStatusId} 
    }).done(function(msg) { 
     if ($.trim(msg) == "fail") { 
      alert("test"); 
      $(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>')); 
      $('option:selected', '.closedStatus ').removeAttr('selected'); 
      $('.closedStatus option:first-child').prop('selected', 'selected'); 
     } 
    }); 
} 
+0

我嘗試使用done()之前,仍然沒有結果,爲了嘗試,我只是改成了success(),我的錯誤。 –

+0

@MichaelDeKeyser - 使用什麼版本的jQuery? – adeneo

+0

jqXhr的成功已被棄用,但未被刪除,因此OP的代碼應該與done()相同() –

0

從它看起來像.success函數的代碼在$ .ajax之外。

它應該是這樣的

$.ajax({ 
    type: "POST", 
    url : url+requestId, 
    data : ({ 
     'closedStatusId' : closedStatusId 
    }), 
.success(function(data) { 
    alert(data); 
    if (data == "fail") { 
     alert("test"); 
     $(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>')); 
     $('option:selected', '.closedStatus ').removeAttr('selected'); 
     $('.closedStatus option:first-child').prop('selected', 'selected'); 
    } 
}); 

,並確保您的服務器發送一些數據。在PHP回聲結果的情況下。

+0

語法錯誤!!! – adeneo

+0

確實有語法錯誤。 –

+0

我認爲'函數(數據)'應該是'函數(味精)'。 –

2
var request = $.ajax({ 
    type: "POST", 
    url : url+requestId, 
    data : ({'closedStatusId' : closedStatusId}); 

request.done(function(msg) { 
    alert("yes"); 
}); 

request.fail(function(jqXHR, textStatus) { 
    alert("Request failed: " + textStatus); 
}); 

這對我來說

+0

嘗試過,仍然不適合我:( –

+0

這很奇怪,因爲這個代碼應該在任何情況下使用失敗和完成 –

+0

是的,我不知道爲什麼它也沒有工作正如我所說,也許我的緩存wasn沒有正確清空(使用CTRL + R),因此我正在使用我的腳本的舊版本:( –

0

你的代碼實際工作是什麼在起作用對我而言,但我有一些爲什麼會失敗的理論。

  1. 響應的MIME類型可能導致jquery錯誤地將響應解釋爲XML(例如),然後無法解析它。你可以通過硬編碼dataType來解決這個問題。

    dataType : 'text', 
    
  2. 您正在嘗試連接到服務器上的不同的域,以便你得到一個跨瀏覽器的腳本錯誤。您可以通過在服務器上設置Access-Control-Allow-Origin標頭來解決該問題。一種方法是通過這樣的.htaccess文件。

    Header set Access-Control-Allow-Origin "*"