У меня есть эта базовая настройка:
- Программа
- C открывает сокет на определенном неиспользуемом порту (скажем, 1234) и ждет, специально прослушивая HTTP-запросы.
- Веб-страница на том же компьютере, написанная в основном в CGI, использует jQuery для создания запроса AJAX, ориентированного на localhost: 1234.
Я хочу, чтобы программа C просматривала запрос, извлекала некоторые данные из него и отвечала простым HTTP-ответом, содержащим некоторые данные. Это полуработающее: веб-страница видит ответ, читает в правильных HTTP-заголовках (проверяя это через firebug), но не получает данные ответа. Открытие в Wireshark показывает, что весь ответ проходит, заголовки и данные вместе, но jQuery, похоже, просто игнорирует сами данные.
jQuery достаточно прост:
$.ajax({ url: "http://localhost:6112",
data: {test1: 'testa', test2: 'testb'},
success: function(d,s,x) {
alert("Data: " + d);
alert("Status: " + s);
alert("Object: " + x);
},
error: function(xhr) {
alert("Error: " + xhr.status);
}
});
Когда я нажимаю кнопку, которая вызывает это, запрос делается; поле "Данные:" появляется пустым; Статус появляется как "Успех", и создается объект. Функция "error" не вызвана.
Что странно (для меня, во всяком случае) заключается в том, что если я открою Firefox и укажу его на localhost:1234
, он загрузится точно так, как я ожидал, - программа C ответит данными, указывающими, что я не послал никаких данных; Firefox делает это (в частности, данные ответа) просто прекрасным. То же самое происходит, если я подключу telnet к этому порту и вручную отправлю (несколько глупый) HTTP-запрос. Итак, насколько я знаю, это должно быть что-то напуганное с jQuery, но я не понимаю, что это может быть!
Я попытался установить параметр dataType в запросе AJAX для разных вещей - text/html, text/plain; Я даже попробовал XML и модифицировал программу C, чтобы отправить ее. Нехорошо - все делают то же самое. Веб-страница получает правильные заголовки HTTP, но не содержит данных.
Также нет ошибок, которые я могу найти; Firebug не жалуется; программа C не жалуется... только одна из этих "очень тихо работающих" ошибок.
Любые идеи, люди?
изменить: Добавление фактических запросов через Firefox, по запросу
Успешный запрос (как, например, перебрасывание localhost: 6112 в строку URL):
GET / HTTP/1.1 Host: localhost:6112 User-Agent: (is it weird that I feel weird about posting my User-Agent string?) Accept: text/html, application/xhtml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.7 Keep-Alive: 115 Connection: keep-alive Successful response: HTTP/1.1 200 OK Host: localhost Content-Type: text/plain Content-Length: 55
<html><head></head><body>Done and done.</body></html>
Заголовки AJAX:
GET /?test1=testa&test2=testb HTTP/1.1 Host: localhost:6112 User-Agent: (UA string) Accept: text/plain, */* Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Content-Type: application/x-www-form-urlencoded Referer: localhost/cgi-bin/runtime.cgi Origin: localhost Resulting response headers: HTTP/1.1 200 OK Host: localhost Content-Type: text/plain Content-Length: 55
<html><head></head><body>Done and done.</body></html>
(Примечание: потому что я новичок, мне пришлось обрезать некоторые из этих гиперссылок)