我正在尝试解决一些我没有编写的代码,并且我很难找出为什么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>
编辑引用链接有效,它会将您带到正确的部分,并且在控制台中返回对象,但是'success'和'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) %>
抱歉,我无法提供更多详情。不幸的是我没有写这个代码,我只负责修复它。感谢您提供的任何帮助。
我相信这是附加请求的代码:
$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 :(得分:0)
来自ajaxSetup的jQuery文档:
Description: Set default values for future Ajax requests. Its use is not recommended.
我建议您更改通话并将回调分配给您的特定ajax请求:
jQuery.ajax
url: 'blah/blah',
success: cbSuccess,
error: cbError,
etc
答案 1 :(得分:0)
如果对jQuery.ajax的实际调用设置了自己的回调,那么我相当肯定它会忽略ajaxSetup提供的回调。除了设置默认值之外,这使得它们几乎不可靠,正如里卡多在他的回答中指出的那样,jQuery开发人员建议不要使用这种机制。
我看到它有几种选择。 jQuery为全局ajax事件绑定提供了一系列其他ajax函数:
jQuery.ajaxStart,jQuery.ajaxStop,jQuery.ajaxComplete,jQuery.ajaxError,jQuery.ajaxSuccess,jQuery.ajaxSend
如果使用这些函数绑定事件,那么它们将始终通过jQuery BUT 的ajax调用来调用。这也可以通过在实际的ajax请求中设置选项“global:false”来覆盖。
如果您遇到这种情况,那么您几乎要坚持Ricardo的答案:修改对jQuery.ajax的实际调用以进行绑定。