2015-09-02 2 views
1

У меня есть локальный веб-сервер, работающий на порту 4444. Этот веб-сервер обслуживает html-страницы и другие файлы, которые идут нормально. Однако, когда я пытаюсь получить данные JSON с сервера, я получаю тайм-аут с ошибкой ERR_EMPTY_RESPONSE в консоли Javascript. Если я загружаю JSON в качестве страницы, он отображается правильно.JQuery JSON вызывает возврат ERR_EMPTY_RESPONSE тайм-аут

Я тестировал Chrome и Firefox. Оба не отображают никаких ошибок, кроме таймаута, и ERR_EMPTY_RESPONSE в Chrome.

  • Возможно, JSON ошибочно отформатирован.
  • Возможно, возникла другая проблема, связанная с доменами (я считаю, что я размещаю локально).
  • Или мои HTTP-заголовки ошибочны.

Это мои данные JSON.

[ 
{ 
"x": "286.610989010989", 
"y": "43.716483516483514", 
"r": "103.5956043956044", 
"g": "127.81208791208792", 
"b": "143.07472527472527" 
}, 
{ 
"x": "286.610989010989", 
"y": "43.716483516483514", 
"r": "103.5956043956044", 
"g": "127.81208791208792", 
"b": "143.07472527472527" 
}, 
] 

Это мой вызов ajax. Я также попытался установить тип содержимого.

function getData() { 
    $.ajax({ 
     url: "/data", 
     type: "json", 
     timeout: 3000, 
     success: actData, 
     complete: getData, 
     error: function(xhr, status, error) { 
      console.log(error); 
     } 
    }); 
} 

Это мои HTTP-заголовки. Я попытался установить тип контента в application/json и text/html.

os.print("HTTP/1.0 200" + "\r\n"); 
    os.print("Content-Type: text/plain" + "\r\n"); 

    os.print("Content-Length: " + data.length() + "\r\n"); 
    os.print("\r\n"); 
    os.write(data); 
+1

Кто-то может исправить меня, если я ошибаюсь, но я думаю, что эта ошибка означает, что браузер получил заголовки файлов, но содержимое файла было пустым. Это заставило бы меня подозревать, что «данные» по какой-то причине не имели значения. –

+0

Я могу открыть/данные в браузере, и он всегда показывает хорошо. Я попытался добавить его с помощью http: // host: 4444, но это не проблема. – RobotRock

+0

Последнее предположение для вас. Можете ли вы попробовать прокомментировать строку Content-Length? –

ответ

3

Я выяснил, в чем проблема, и это было глупее, чем я ожидал. Я отфильтровал свои запросы, чтобы разрешить только POST и GET, поскольку я думал, что это хороший способ фильтровать входные данные. Тем не менее, запросы JSON фактически отправляют заголовок с JSON вместо GET. Так что его отфильтровали. Следовательно, я мог бы увидеть его в браузере, но не получить его как JSON (так как тогда он отправит заголовок JSON).

-2

Ваш адрес ajax неверен, правильный звонок.

$.ajax({ 
    data:{myparam}, 
    type:get, 
    datatype:json, 
    URL:myurl, 
    success:mifunction, 
    error:myControl 
}); 
+0

Нет ничего плохого в его призыве ajax. –