2016-03-16 2 views
0
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 (данные);

В чем проблема?

+0

Какой тип ответа вы получаете? Вы получаете строку JSON или не JSON? –

+0

'contentType: 'application/json',' - Вы делаете запрос GET, нет содержимого для описания типа. Почему вы это устанавливаете? – Quentin

+1

'dataType: 'json'' для функции loadJSON? – JClaspill

ответ

4

Вы получаете текстовый ответ, потому что сервер возвращает данные с неправильным типом содержимого.

Вам нужен сервер включить Content-Type: application/json в HTTP ответ заголовка для данных в формате JSON.


Если установить dataType: "json" в настройках объекта вы передаете ajax тогда вы расскажете JQuery игнорировать Content-Type и разобрать его, как JSON в любом случае (но сервер, честно говоря, неправильно, и вы должны исправить так или иначе).

Установка dataType также установит заголовок запроса Accept, чтобы сообщить серверу, что предпочтительнее JSON ... но это скорее неявно в URL-адресе, который вы ему указываете.