3

我创建了一个 jQuery ajaxTransport 处理程序(对于我拥有的一些测试用例),它应该模拟服务器上的 403 验证错误。

问题是,当我这样做并返回 403 错误时,数据没有返回,不是 json 也不是 responseText。

这是我的代码(简化):(也在 jsfiddle http://jsfiddle.net/znTCL/1/上)

$.ajaxTransport('json',function( options, originalOptions, jqXHR ) {
    return {
      send: function( headers, completeCallback ) {
        completeCallback(403, 'Forbidden', {json : {'Title': 'Title is required.'}});
      }
    };
});

$(function() {

    $.ajax({
        url :document.location,
        type : 'POST',
        data : {Title:''},
        dataType : 'json'                   
    }).fail(function(){ 
        console.log(arguments);
    });
});

如果我在服务器上返回 403 并且不使用 ajaxtransports,那么一切都按预期工作,失败回调具有 jqXHR 对象,该对象还包含我可以解析为 JSON 的 responseText,然后显示基于该的验证错误. 对于 ajaxtransports,jqXHR 对象没有 reponseText 属性。

如果我在传输中返回 200,则数据按应有的方式出现,并且 responseText 应按应有的方式出现。

我做错了什么还是这是 jQuery ajaxTransports 的限制? ​</p>

4

2 回答 2

2

返回错误时,您似乎无法将 json 返回到 completeCallback。即使您的请求是 json 请求。

返回文本作品:

completeCallback(403, 'Forbidden', {text : 'Title is required.'});

或者

completeCallback(403, 'Forbidden', {text : JSON.stringify({'Title': 'Title is required.'})});

现在失败回调中 jqXHR 对象的 responseText 不是未定义的,它包含我提供的文本,我现在可以解析它。

于 2012-05-23T12:14:47.363 回答
0

尝试使用 statusCode:

$.ajax({
  statusCode: {
    404: function() {
      alert("page not found");
    }
  }
});

http://api.jquery.com/jQuery.ajax/

于 2012-05-23T10:27:25.897 回答