什么是jQuery相当于Prototype的Ajax.Responders.register?

时间:2009-08-04 16:48:58

标签: javascript jquery prototypejs

是否存在与此原型代码等效的jQuery?

Ajax.Responders.register({
  onException: function(x,y)
  {
    if(y.message!="Syntax error") new Insertion.After("toperrorbox","<p style='color:red'>"+y.message+"</p>");
  }
});

3 个答案:

答案 0 :(得分:4)

Prototype的Ajax.Responders是监听所有ajax事件的全局侦听器。 jQuery确实有一个等价物。全球Ajax Events

由于jQuery的性质,语法略有不同,但类似的东西应该可以解决这个问题:

$('#toperrorbox').bind('ajaxError', function (event, XMLHttpRequest, ajaxOptions, thrownError) {
   // thrownError only passed if an error was caught
   // this == dom element listening
   var message = thrownError === undefined? XMLHttpRequest.responseText : thrownError.message;
   $(this).after("<p style='color:red'>"+ message +"</p>");
}

在这种情况下,XMLHttpRequest.responseText将包含失败请求中从服务器返回的正文(如果有)。并且thrownError将包含实际的异常,我相信你实际上是在追求它。但是,我建议在尝试打印其消息之前检查是否确实传入了异常,这就是我在我的示例中所做的。如果它已捕获异常,它将使用该消息,但如果没有,它将使用服务器响应。

值得注意的是,使用jQuery,所有事件总是绑定到某些东西。通常是DOM节点,但可能是windowdocument。如果你想做同样的事情,没有绑定到要处理的特定元素(如上面的例子),你可以将事件绑定到window并选择要在回调中处理的元素像这样:

$(window).bind('ajaxError', function (event, XMLHttpRequest, ajaxOptions, thrownError) {
   // thrownError only passed if an error was caught
   // this == dom element listening
   var message = thrownError === undefined? XMLHttpRequest.responseText : thrownError.message;
   $('#toperrorbox').after("<p style='color:red'>"+ message +"</p>");
}

这可以让你更好地控制事件,因为你不必记住它们绑定的元素,如果你没有使用匿名函数,你可以随意unbind特定的回调。 / p>

答案 1 :(得分:3)

http://docs.jquery.com/Ajax/ajaxError#examples

$('#toperrorbox').ajaxError(function (event, request, settings) {
   $(this).after("<p style='color:red'>"+ request.responseText +"</p>");
}

在AJAX请求失败时附加要执行的函数。

答案 2 :(得分:0)

我不知道原型,但我很确定它是这样的:

$.ajax({
    error: function(xhr, textStatus, exception) {
        if (exception.message != "Syntax error") {
             var newItem = '<p style="color:red">' + exception.message + '</p>';
             $('#toperrorbox').after(newItem);
        }
    }
});

编辑: 或者你可以尝试更全面的东西:

$('#toperrorbox').ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError) {
        if (thrownError != "Syntax error") {
             var newItem = '<p style="color:red">' + thrownError + '</p>';
             $(this).after(newItem);
        }
    })