是否存在与此原型代码等效的jQuery?
Ajax.Responders.register({
onException: function(x,y)
{
if(y.message!="Syntax error") new Insertion.After("toperrorbox","<p style='color:red'>"+y.message+"</p>");
}
});
答案 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节点,但可能是window
或document
。如果你想做同样的事情,没有绑定到要处理的特定元素(如上面的例子),你可以将事件绑定到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);
}
})