如何解析$ .post回调中没有错误的空JSON对象

时间:2012-03-24 11:10:44

标签: jquery

如果我没有回复以下帖子,我会收到一个AJAX解析错误:

$.post('user.php', {id: 'job'}, function(data) {
    console.log(data.length);
},'json');

我该如何避免它?我想避免服务器给出任何空答案(如“0”)来限制带宽消耗(移动应用程序)。

由于

4 个答案:

答案 0 :(得分:6)

如果您想避免空JSON响应的解析错误:

var options = {
                url: 'http://mysite.com/page',
                converters: { "text json": function (json_string) {
                        if ( typeof json_string != 'string' || !$.trim(json_string).length ) {
                            return {};
                        } else {
                            return jQuery.parseJSON( json_string );
                        }
                    } 
                }
            };

$.ajax(options);

注意:此解决方案需要jQuery 1.5(请参阅http://api.jquery.com/extending-ajax/#Converters)。

如果要将转换器用于每个json请求,也可以将转换器移动到$ .ajaxSetup()。

我发现这很有用,因为Rails 3无论如何都会返回空的JSON响应以及HTTP 200以表示成功的模型删除等 - 所以让jQuery将其视为失败并不是很酷。

答案 1 :(得分:4)

支持对JSON

调用的空响应

删除响应类型声明,如果您知道它在您给出的代码中会有所不同:

$.post('user.php', {id: 'job'}, function(data) {
    console.log(data.length);
});

jQuery将在data中为您提供已解码的JSON,如果它收到正确的JSON。

节省带宽

您正试图通过从响应中删除2个字符(例如“{}”或“[]”)来节省带宽。这可能毫无意义(不仅因为特定运营商测量带宽使用的方式),因为还存在不在响应主体中而是在其报头中发送的数据。标题包含a lot of information,其中包括:

  • 缓存信息,
  • 内容类型,
  • 服务器软件信息,
  • Cookie数据,
  • 加上用于各种目的的非标准标题,

每个标题都采用以下格式:

Header-Field-Name: HeaderFieldValue

因此限制发送的标头数量可能比避免响应中提到的两个字符的效率高几个数量级

答案 2 :(得分:0)

您可以使用HTTP 4XX错误来响应AJAX调用。然后不会调用成功回调。

答案 3 :(得分:0)

您需要在ajax请求中设置dataType,例如

$.ajax({url:'user.php', type: "POST", data:{id: 'job'}, dataType:'json',
   success:function(data){
            console.log(data.length);
       }})

jquery将返回一个已解析的JSON对象作为响应。您可以根据需要进行操作。

请查看dataType

的链接