Jquery ajax没有捕获404 [重复]
Posted
技术标签:
【中文标题】Jquery ajax没有捕获404 [重复]【英文标题】:Jquery ajax not catching 404 [duplicate] 【发布时间】:2018-08-30 07:51:40 【问题描述】:我正在尝试使用 AJAX 填充我的下拉列表,并且我从控制器返回 404 错误消息,而 Ajax 没有捕捉到它...
我在控制器的回报是
return Response()->json(array('error' => '404 car type not found'), 404);
这是我的 JS
$('document').ready(function ()
$('#car_type').bind('changed.bs.select', function ()
$.ajax(
type: 'POST',
url:'carclass/'+$('#car_type').val(),
dataType: 'json',
error: function(XMLHttpRequest, textStatus, errorThrown)
alert('status:' + XMLHttpRequest.status + ', status text: ' + XMLHttpRequest.statusText);
,
success: function( json )
$.each(json, function(i, obj)
$('#car_class').append($('<option>').text(obj.name).attr('value', obj.id));
);
$('#car_class').selectpicker('refresh');
);
);
);
它正在返回
GET http://localhost:8000/ads/cartype/2 404 (Not Found)
【问题讨论】:
那么问题似乎出在服务器端,而不是您的 JS。 为什么您的 ajax 正在向 carclass/... 发出 POST 请求,而您提到的返回是对 cartype/... 的 GET 请求? “没抓到” - 没抓到什么?它是否达到了error:
回调但您没有收到明确的消息?是不是发现它是 404 所以点击 'success:' 回调?
我很抱歉,我意识到这已经得到了回答,我将其标记为重复......似乎我的主要问题是#car_type,它应该是#car_brand。我现在很尴尬
【参考方案1】:
请改用fail()
。您还可以使用done()
回调,它是success
的替代方法。
$.ajax( "example.php" )
.done(function(data)
$.each(data.responseJSON, function(i, obj)
$('#car_class').append($('<option>').text(obj.name).attr('value', obj.id));
);
$('#car_class').selectpicker('refresh');
)
.fail(function(data)
alert('status:' + this.status + ', status text: ' + this.statusText);
)
.always(function()
alert( "complete" );
);
【讨论】:
1.error
属性根本不被弃用。您添加到文档中的链接甚至显示了这一点。 2. $.ajax()
调用中没有 fail
属性。您的代码将不起作用。我想你打算改用fail()
。
而fail:
不是error:
的替代品,它是一种承诺的方法,所以$.ajax(..).fail(function() ... )
我可以看到对 ".fail() 方法替换已弃用的 .error()" (来自链接的文档)的混淆。这意味着promise上的错误方法,而不是ajax调用中的错误callback。
谢谢,我编辑了我的错误。
一个很好的编辑。但需要明确的是,error:
和.fail()
之间没有区别,只是您可以返回承诺并稍后添加.fail()
。所以你重构了 OP 的代码,但没有修复它(除非你添加了一些文本中没有解释的东西)。【参考方案2】:
将您的 error
块替换为类似这样的内容,其中 xhr.status
将为您提供响应的状态代码。
error:function (xhr, ajaxOptions, thrownError)
if(xhr.status==404)
alert('status:' + xhr.status + ', status text: ' + xhr.statusText);
【讨论】:
不确定谁复制了谁以及从哪个其他问题。此外,这并不能回答 OP 的要求。 我正在写答案。我不知道另一个答案。 @RoryMcCrossan 我指的是这个问题的另一个答案,它在您编辑之前具有几乎相同的描述,并且代码和布局完全相同。 也许是复制了@RoryMcCrossan。不知道 鉴于您发布了 8 秒后,您很可能都从同一个地方复制了代码。如果这是一个 SO 问题,那么投票关闭作为副本会更合适。然而,这没有实际意义,因为您的答案与问题完全无关以上是关于Jquery ajax没有捕获404 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 JSONP 时如何捕获 jQuery $.getJSON(或数据类型设置为“jsonp”的 $.ajax)错误?
jQuery 修复“未捕获的 TypeError:$ 不是函数”错误 [重复]
哪些浏览器不支持带有 jQuery.ajax 的 HTTP DELETE? [复制]