jquery - 如何在 $.post 回调中解析空 JSON 对象而不出错

标签 jquery

如果我没有向以下帖子返回任何内容,则会收到 AJAX 解析错误:

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

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

谢谢

最佳答案

如果您想避免空 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 将其视为失败并不酷。

关于jquery - 如何在 $.post 回调中解析空 JSON 对象而不出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9851257/

相关文章:

javascript - 动画功能 : change div width by using radio buttons

javascript - 数据表对损坏的子行进行排序

javascript - 如何以绝对位置让 child 居中

javascript - 使用js对象调用其他函数的函数

javascript - 尝试使用 jquery 动态添加复选框但没有出现任何内容

javascript - 如何自动调整此 HTML 菜单的大小以适合父级宽度?

javascript - 与 document.forms[0].elements[i].value; 等效的 jQuery 是什么?

jquery - 第二次单击后启用/禁用输入字段

jquery - 如果免费的 jqgrid 表单编辑,如何增加字体大小和元素高度

jquery - 在页面重新加载时维护 jQuery-ui 上一个事件选项卡(重新加载之前)