не могу подружить ПК с ардуино через аякс. отправляю с ПК асинхронный запрос традиционно: Код (Text): http_request.onreadystatechange = function() { alertContents(http_request,from); }; var reqs="http://192.168.7.177?a0="+a0+"&a1="+a1+"&a2="+a2; http_request.open('GET', reqs, true); http_request.send(); function alertContents(http_request,from){ if (http_request.readyState == 4) { //ждем if (http_request.status == 200) { //все ок //тут реакция } } так вот, http_request.readyState благополучно пробегает 1,2 и 4 а вот http_request.status всегда нулевой. И полный текст http_request тоже пустой. на самом ардуино тоже традиционно: Код (Text): client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); //блабла отправляем еще что-то если открыть ардуино через браузер напрямую, - все работает, все стреляет, команд выполняются, то есть println отрабатывает, поскольку команды мотору идут сразу после. а аякс ничего не видит. Что не так?
Копаю, кажется понял. Запрет на кроссдоменные запросы, ведь ПК и арудино на разных IP. Но удивительны две вещи. 1. Команды серверу на ардуино проходят! 2. IE получает ответ 200 OK, мозилла и опера - нет. а может, дело не в этом?
Да, дело в кросс-доменных запросах. И дело в том, что это защита не сервера, а защита клиента, то есть браузера. Поэтому по факту сервер запрос отрабатывает, а браузер ответ зарезает. Решений несколько: Old school. Проксировать запрос через свой сервер. То есть: AJAX-запрос идёт на ваш сервер на том же домене, сервер переправляет его стороннему домену и прокидывает ответ обратно Hack. Использовать JSONP. New school. Возвращать в заголовках HTTP-ответа с Arduino директиву: Access-Control-Allow-Origin: * Это инструкция для браузера, что тут кросс-доменный запрос позволяется. Правильно понимают этот хеадер Mozilla и Chrome — давно, Opera начиная с версии 12, IE не помню, вроде бы с 8-й версии.