2013-04-15 79 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实际调用做结合。