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);
问题是什么?
答案 0 :(得分:4)
您收到纯文本响应,因为服务器返回的内容类型错误。
您需要服务器将Content-Type: application/json
包含在JSON数据的HTTP 响应标头中。
如果你在传递给dataType: "json"
的选项对象中设置ajax
,那么你将告诉jQuery忽略Content-Type并将其解析为JSON(但坦率地说,服务器配置错误,无论如何你应该解决这个问题。)
设置dataType
还会设置Accept
请求标头,告诉服务器JSON是首选的...但是在您提供的URL中这是隐含的。