2013-04-15 83 views
1

我想解決一些我沒有寫的代碼,並且我試圖弄清楚爲什麼Ajax返回沒有觸發回調。下面是重視行爲的AJAX功能代碼:Ajax返回不能觸發回調

# Callback before AJAX request sends 
cbBeforeSend = (jqXHR, settings) -> 
    console.log jqXHR 
    # initialize message/status elements 
    $flashIcon.attr 'class', 'icon icon-refresh icon-spin' 
    $flashError.html '' 
    $flashNotice.html '' 

# Callback when AJAX returns with success 
cbSuccess = (data, textStatus, jqXHR) -> 
    console.log 'success' 
    $flashIcon.attr 'class', 'icon icon-ok-sign' 
    window.globalLoadCallback() 

# Callback when AJAX returns with error 
cbError = (jqXHR, textStatus, errorThrown) -> 
    console.log 'error' 
    $flashIcon.attr 'class', 'icon icon-remove-circle' 
    # Run the response javascript, even when the status indicates an error 
    if /text\/javascript/.test jqXHR.getResponseHeader('Content-Type') 
    eval jqXHR.responseText 

# Callback when AJAX returns 
cbComplete = (jqXHR, textStatus) -> 
    console.log 'cbComplete' 
    if $flashIcon.is('.icon-refresh') 
    $flashIcon.attr 'class', 'icon icon-warning-sign' 

我們的應用有兩個鏈接到報價/報價路徑:

新報價鏈接的作品,並觸發「成功」和「cbComplete '我上面顯示的回調。下面是該鏈接的代碼:

<li> 
    <%= link_to new_quoting_quote_path, remote:true do %> 
    <i class="icon icon-plus-sign"></i> 
    <span>New Quote</span> 
    <% end %> 
</li> 

編輯引用鏈接的作品,它帶給你的正確的部分和對象獲取控制檯返回,但「成功」和「cbComplete」回調不發射(錯誤不是)。只有'cbBeforeSend'回調纔會觸發,因爲flashIcon上的類保持爲「icon icon-refresh icon-spin」。我不相信crm_connection有問題,因爲在瀏覽器中,鏈接呈現爲「/ quoting/quotes/183/edit」。正確的ID似乎被提供。下面是該鏈接的代碼:

<%= client_management_tab 'Health', edit_quoting_quote_path(@crm_connection) %> 

對不起,我不能提供更多的細節。不幸的是,我沒有寫這個代碼,只負責修復它。感謝您提供任何幫助。

我beleive這是附加的請求的代碼:

$flashInfo = $('div.flash-info') 
    $flashIcon = $flashInfo.find('i#ajax-status') 
    $flashError = $flashInfo.find('#flash-error') 
    $flashNotice = $flashInfo.find('#flash-notice') 
    $(document).bind 'ajax:beforeSend', cbBeforeSendBound 
    $(document).bind 'ajax:success', cbSuccessBound 
    $(document).bind 'ajax:error', cbErrorBound 
    $(document).bind 'ajax:complete', cbCompleteBound 

$.ajaxSetup(
    beforeSend: cbBeforeSend 
    success: cbSuccess 
    error: cbError 
    complete: cbComplete 
) 
+0

我添加了我認爲將它們附加到AJAX請求的內容。對不起,但我新使用AJAX不僅僅是改變基本文本。 – jro987

+0

發佈請求時,您在Web控制檯,Firebug或Chrome開發者工具中看到什麼? –

回答

0

從jQuery文檔的ajaxSetup:

Description: Set default values for future Ajax requests. Its use is not recommended.

我建議你改變你的電話,並指定回調您的特定Ajax請求:

jQuery.ajax 
    url: 'blah/blah', 
    success: cbSuccess, 
    error: cbError, 
    etc 
0

如果實際調用jQuery.ajax設置自己的回調,然後我相當肯定它會忽略ajaxSetup提供的回調。這使得它們對於除了設置默認值之外的任何事情都非常不可靠,正如Ricardo在他的回答中指出的那樣,jQuery開發人員建議不要使用這種機制。

你有幾個選擇我看到它的方式。有一系列的jQuery全局AJAX事件提供其他Ajax功能的結合:

jQuery.ajaxStart,jQuery.ajaxStop,jQuery.ajaxComplete,jQuery.ajaxError,jQuery.ajaxSuccess,jQuery.ajaxSend

如果您在實際的Ajax請求:通過設置選項「假全局」綁定使用這些功能,那麼他們將永遠被Ajax調用jQuery的通過但調用這也可以重寫的事件。

如果這是你的話,那麼你幾乎堅持了裏卡多的答案:修改到jQuery.ajax實際調用做結合。