获取$ .ajax中的字符串响应

时间:2016-03-16 14:38:39

标签: javascript jquery ajax

var module = (function(){
    return{
        loadJSON: function(url, success, error){
            $.when($.ajax({
                type: 'GET',
                cache: false,
                url: url,
                contentType: 'application/json',
                data: {
                    format: 'json'
                },
                success: success,
                error: function(err){
                    console.log('Error: ', err);
                }
            })).then(function(data){
                alert('AJAX completed');
            });
        }
    }
})();

$(document).ready(function(){
    function _updateCompany(data){
        data = JSON.parse(data);
        data = data.data;
        for(var i=0; i<data.length; i++){
            var item = '<li>Name: ' + data[i]['name'] + ' Total Emp: ' + data[i]['totalCount'] + '</li>';
            $('#companyList').append(item);
        }
    }

    function _error(err){
        console.log('Error: ', err);
    }

    module.loadJSON('/path/to/company.json', _updateCompany, _error);
});

这里我得到字符串响应而不是对象。因此必须使用JSON.parse(data);

问题是什么?

1 个答案:

答案 0 :(得分:4)

您收到纯文本响应,因为服务器返回的内容类型错误。

您需要服务器Content-Type: application/json包含在JSON数据的HTTP 响应标头中。

如果你在传递给dataType: "json"的选项对象中设置ajax,那么你将告诉jQuery忽略Content-Type并将其解析为JSON(但坦率地说,服务器配置错误,无论如何你应该解决这个问题。)

设置dataType还会设置Accept请求标头,告诉服务器JSON是首选的...但是在您提供的URL中这是隐含的。