У меня есть такая базовая настройка:
- Программа 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 отображает его (в частности, данные ответа) просто отлично.То же самое происходит, если я подключаюсь к этому порту и вручную отправляю (несколько глупо выглядящий) HTTP-запрос.Итак, насколько я знаю, это должно быть что-то необычное с jQuery, но я не знаю, что это может быть!
Я попытался установить параметр dataType в AJAXзапрос к различным вещам - text / html, text / plain;Я даже попробовал XML и изменил программу на C, чтобы отправить это вместе.Ничего хорошего - все они делают одно и то же.Веб-страница получает правильные заголовки HTTP, но без данных.
Также не появляется никаких ошибок, которые я могу найти;Firebug не жалуется;программа на C не жалуется ... только одна из тех "очень тихих не работающих" ошибок.
Любые идеи, ребята?
edit: Добавление фактических запросов, проходящих через 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>
(Примечание: поскольку я новичок, мне пришлось обрезать некоторые из этих гиперссылок)