繁体   English   中英

如何在jQuery UI自动完成Ajax中获取HTTP错误响应代码403?

[英]How to get HTTP error response code 403 in jQuery UI Autocomplete Ajax?

我正在对某些<input type='text'>框使用jQuery UI自动完成功能,其中该框应根据输入返回一些选择。 这工作正常,但现在我需要添加检查,是否甚至允许用户执行此查找,否则,应提醒用户。

这是我当前的代码(或至少其中一些):

$(this).autocomplete({
  source: function(request,response) {

    $.ajax({
      url: 'search.json',
      data: { field: thisName,
              search: request.term }
    }).done(function(data) {
        response(data);
    }).fail(function(jqXHR, textStatus, errorThrown) {
      console.dir(jqXHR);
      console.log(textStatus);
      console.log(errorThrown);
    });
  },
  minLength: 1,
  ...[CUT]...

如果我的search.json内部只有这个http_response_code(403); 我将在控制台中收到此消息(希望图片可读):

Chrome JS控制台

所以我的问题是- 我如何向自动完成脚本报告错误,以便其正确运行? 例如,它可以某种方式警告用户。

目前,我想使用403 Forbidden代码进行报告,但是也可能存在其他错误-例如,用户会话可能过期或类似的错误。 它不一定需要是HTTP响应代码,但这是我认为在这种情况下最正确使用的代码?

请参阅我的代码的JSFiddle演示

我正在IIS 7.5上使用jQuery 1.11.0和jQuery-UI 1.10.4以及PHP 5.4。 IIS会将.json文件作为普通的PHP文件传递-只是澄清是否重要。

使用AjaxSetup似乎是一个选择:

$.ajaxSetup({
    error: function (x, status, error) {
        if (x.status == 403) {
            alert("Sorry, your session has expired. Please login again to continue");
            window.location.href ="/Account/Login";
        }
        else {
            alert("An error occurred: " + status + "nError: " + error);
        }
    }
});

资料来源: http : //cypressnorth.com/programming/global-ajax-error-handling-with-jquery/

由于$ .ajax()也支持error方法,因此它可能也适用于$ .ajax()本身。

我实际上发现这是由我在IIS中定义了自己的错误页面引起的。 当将错误代码403更改为其他代码(例如999)时,我会在我的Ajax脚本中得到403错误:

IIS自定义错误代码

Chrome JS控制台

我自己回答了这个问题,以防其他人遇到类似的问题并且不知道自己定义的HTML错误消息/页面将在Ajax中给出200的HTTP响应代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM