другой адрес - потому что страница на отдельном сервере лежит. еще у меня было подозрение, что ардуина должна что-то отвечать на запрос. может такое быть?
другой адрес - потому что страница на отдельном сервере лежит.
Ну да... и есть подозрение, что вы шлете свой запрос этому серверу, а не ардуине. Если тестить не через F12, а с помощью Fiddler2, то подозреваю что мы увидим два запроса :) Один сгенерированный jQuery кодом, а второй - сабмитом формы. Просто F12 с помощью вы не успеваете увидить первый. Второй запрос вам очищает лог вызовов и зависает сам (Fiddle2 - избавлен от недостатка "очистки", поэтому через него картина выглядит полнее).
А еще - стоит на вкладочку Console заглянуть. Убедится что там никаких ошибок не светится. Вдруг браузер срубил запрос по соображениям секьюрности? Заодно убедится проверить что "MK Updated" вывеслось. Если вывелось, значит запрос к арудине у нас прошол нормально, а кипишь поднимает второй, мусорный запрос. Которого вообще быть не должно.
alexey_and пишет:
что ардуина должна что-то отвечать на запрос. может такое быть?
Правильное подозрение.
Строка:
client.println("HTTP/1.1 200 OK"); //send new page
Это и есть, то что должна минимально должна ответить ардуина, что-бы браузер понял что "с запросом все хорошо".
Standard response for successful HTTP requests. The actual response will depend on the request method used. In a GET request, the response will contain an entity corresponding to the requested resource. In a POST request the response will contain an entity describing or containing the result of the action.[2]
не не. запрос точно ардуине. я конечно бамбук, но не до такой степени :)
А вот скриншот говорит что бамбук :)
Вы не путайте "что вы хотели сделать" и "что вышло" ;)
Кнопка у вас типа submit? А что происходит при нажатии такой кнопки? А формочка отправляется на адресс который указан в качестве action, у тега form. Если там ничего не указанно, то... на адресс текущей страницы (и происходит перезагрузка страницы). А текущая страница - у вас "на другом сервере".
Вот вы... и стали бамбуком ;) Отправили запрос на адресс текущей страницы, на "другой сервер", а не ардуины.
Вернее скорее всего на ардуину вы тоже успеле отправить, своим jQuery кодом. Но вот "дождатся ответа" - уже некому. Страница перегрузилас.
Вообщем вам нужно, либо менить тип кнопки (что я предложил в "попробуйте..."), либо пытатся "задавить" дефолтную логику кнопки типа submit. Вешатся не на событеие onClick, а на submit и не кнопки, а формы... как-то так:
Перед тем как добавалять - попробуте, все-таки, вначале руками урл дернуть. Велика вероятность что вы уже отвечаете OK-ями. Строчку "как отвечать", а копировал из кода выше по ветке. Так что - вероятно что вы уже отвечаете. По крайней мере "иногда" (не вникал, всегда ли отвечаете).
Вот последнее - уже больше похоже на правду. По крайней мере видно, что ваш javascript пытается дергать ардуину, а вот ее ответ - обрезается из секьюрных соображений.
Это как раз случай: "А еще - стоит на вкладочку Console заглянуть. Убедится что там никаких ошибок не светится. Вдруг браузер срубил запрос по соображениям секьюрности"
Вообщем это означает что мы пытаемся сделать "кросс-доменный запрос". Когда html/javascript у нас загружены с одного домена (192.168.1.1), а запрос мы пытаемся сделать к другому домену (192.168.1.177). Упоминал и про это в сообщении #4 :) К javascript-ту это ограничение -тоже относится.
Вообщем тут у вас есть два пути:
1. Ответом дуины должен быть не html, а JSONP (JSON - тоже не пропустит, нужно именно JSONP). Впрочем если мы не анализуем что ответила дуина, возможно "ответ и не важен", главное "попросить у нее именно JSONP. Скажем с помощью jQuery.getJSON() | jQuery API Documentation и не забыть добавить в запрашиваемый URL "callback=?" - что-бы поняло что мы ждем не JSON, а JSONP
Можно еще попробовать jQuery.ajax() | jQuery API Documentation, у него в опциях есть "crossDomain (default: false for same-domain requests, true for cross-domain requests)" - но, если честно не пробовал никогда.
2. Вторым вариантом - это что-бы в ответе дуины, кроме HTTP200 был еще тот самый заголовок:
"Access-Control-Allow-Origin: *" - разрешить кросс доменный запросы с любых доменов
Или
"Access-Control-Allow-Origin: http://192.168.1.1" - разрешить с конкретного домена (так безопасней)
Возможно еще потребуется что-то типа
"Access-Control-Allow-Methods: GET,OPTIONS"
В этом варианте - внесения изменений в клиентскую часть - не должно потребоваться.
теперь никаких ошибок. но вот еще один блудняк: у меня сделано 2 таба с помощью navbar. по дефолту у меня таб "Control". открываю index.html. все работает. перехожу на другой таб, и кнопки там не работают. как только обновляю страницу - начинают работать. до перехода на другой таб. в чем может быть загвоздка? сделал видео чтоб было понятней что я имею ввиду. там видно реакцию на нажатие кнопок - появляются строки внизу экрана, и при переходе на другой таб - не появляются. потом обновляю страницу и все начинает работать в пределах текущего таба
и еще вопросик. можно ведь каким-то способом передавать значения с ардуины в jquery? например, для светильника у меня сделаны и физические кнопки (простые тактовые на цифровой вход + реле на вкл светильника), и toggle switch на странице. можно сделать так, чтоб ардуина при включении-выключении света с физ. кнопки двигала и переключатель на странице. заодно таким способом была бы обеспечена синхронизация состояния на всех клиентских планшетах/телефонах/компах
Ага. А загуглили эту ошибку - то и сами бы нашли ответ :)
alexey_and пишет:
у меня сделано 2 таба с помощью navbar. по дефолту у меня таб "Control". открываю index.html. все работает. перехожу на другой таб, и кнопки там не работают. как только обновляю страницу -
Простите. Но это уже "работа над проектом" :) Отлов багов и поиск "почему не работает" это, зачастую, 80% всей работы. А когда "поймал", то исправить уже дело одной строчки (как прошлая проблема).
Тем более что вам - это намного проще сделать. Не буду же я у себя все это поднимать. А вам - открываете консольку, смотрите есть ли какие-то ошибки в ней, смотрите нет ли где 404 ошибок, натыкиваете console.log в свои скрипты, смотрите "куда доходит выполнение, куда нет". не срабатывает обработчик кнопки или уже ajax код, пошагово дебагером проходите и смотрите соотвествуетли реальныей процесс тому что ожидалось.... вообщем место-то "много". Описать все возможные причины в режиме "проверте то, провертье это..." - это очень долго.
Да и, в конце концов - это уже все довольно далеко от тематики форума :)
alexey_and пишет:
и еще вопросик. можно ведь каким-то способом передавать значения с ардуины в jquery?
Вот прямо так "взять и передать" -нет. jQuery умеет только отсылать запросы.
Конечно обходные пути возможны (и все они будут, в какой-то степени компромисами, имеют свои недостатки. особенно учитывая ограниченность дуины): long polling, web-sokets, тупо часто опрашивать дуину, завести промежуточный сервер, на которые дуина будет слать отчеты...
Вообщем это задача на порядок сложней. Требует и "натурных эксперементов" и с большой вероятностью пересмотра всей архитектуры решения.
А по вашему коду. Вы программист или где? Где же здоровая лень? Это для бухгалтера нераздумчивая усидчивость - благо. А девиз програмера "компьютер должен работать, а человек - думать".
Ну вот не лень вам было набивать столько однотипных
Ну хоте-бы "192.168.1.177" - можно было вынести в отдельную переменную что-бы если дуина сменит адресс - менять его в одом месте, а не 50-ти.
....
var arduinoUrl="htt_p://192.168.177"
...
// где-то в обработчике
$.get(arduinoUrl+"/?sceneBLABLA",....)
А потом увидить, что отличие всех обработчиков, вообщем-то уже толкко в имени параметра передаваемого. Ну значит вместо 10-тка обработчиков можно один использовать.
Присвоить всем своим кнопкам какой-то класс, скажем <a class="arduinoButton"
Самой же кнопке, сразу прописать "что там нужно дуине передевать. Получится
<a class="arduinoButton" data-command="stopALL"
Ну и обработчик вешать уже по селектору класса. Один - сразу на все.
Простите. Но это уже "работа над проектом" :) Отлов багов и поиск "почему не работает" это, зачастую, 80% всей работы. А когда "поймал", то исправить уже дело одной строчки (как прошлая проблема).
ясненько, значит буду тыкаться. попробую заново сгенерить эти страницы, может поможет...
Цитата:
А по вашему коду. Вы программист или где? Где же здоровая лень?
вообще ни разу не программист. если б я им был - то вряд ли что-нибудь спрашивал бы. а учиться видимо уже поздно, либо вообще не дано - я просто физически не воспринимаю это. ну зато с железом у меня нет проблем :)
за ценные замечания огромное спасибо, обязательно буду применять :)
Цитата:
И еще - опять у вас <input type="submit" видно. Зачем вам submit-ы? Вы отправляете формочку на сервер и что-то там с ней делаете?
это так конструктор сгенерил. как бы оно работало - и внимания не обращал...
Вообщем попробуйте
сделать.
мне это самым вероятным кажется.
спасибо, вечером попробую :)
другой адрес - потому что страница на отдельном сервере лежит. еще у меня было подозрение, что ардуина должна что-то отвечать на запрос. может такое быть?
другой адрес - потому что страница на отдельном сервере лежит.
Ну да... и есть подозрение, что вы шлете свой запрос этому серверу, а не ардуине. Если тестить не через F12, а с помощью Fiddler2, то подозреваю что мы увидим два запроса :) Один сгенерированный jQuery кодом, а второй - сабмитом формы. Просто F12 с помощью вы не успеваете увидить первый. Второй запрос вам очищает лог вызовов и зависает сам (Fiddle2 - избавлен от недостатка "очистки", поэтому через него картина выглядит полнее).
А еще - стоит на вкладочку Console заглянуть. Убедится что там никаких ошибок не светится. Вдруг браузер срубил запрос по соображениям секьюрности? Заодно убедится проверить что "MK Updated" вывеслось. Если вывелось, значит запрос к арудине у нас прошол нормально, а кипишь поднимает второй, мусорный запрос. Которого вообще быть не должно.
что ардуина должна что-то отвечать на запрос. может такое быть?
Правильное подозрение.
Строка:
client.println("HTTP/1.1 200 OK"); //send new pageЭто и есть, то что должна минимально должна ответить ардуина, что-бы браузер понял что "с запросом все хорошо".
List of HTTP status codes - Wikipedia, the free encyclopedia
не не. запрос точно ардуине. я конечно бамбук, но не до такой степени :)
ардуина имеет адрес 192.168.1.177, а сервер, где крутится страница - 192.168.1.1
потестю вдоль и поперек вечером, mk updated ни разу в консоли не видел
попробую со стороны ардуины отвечать ок-ями :)
не не. запрос точно ардуине. я конечно бамбук, но не до такой степени :)
А вот скриншот говорит что бамбук :)
Вы не путайте "что вы хотели сделать" и "что вышло" ;)
Кнопка у вас типа submit? А что происходит при нажатии такой кнопки? А формочка отправляется на адресс который указан в качестве action, у тега form. Если там ничего не указанно, то... на адресс текущей страницы (и происходит перезагрузка страницы). А текущая страница - у вас "на другом сервере".
Вот вы... и стали бамбуком ;) Отправили запрос на адресс текущей страницы, на "другой сервер", а не ардуины.
Вернее скорее всего на ардуину вы тоже успеле отправить, своим jQuery кодом. Но вот "дождатся ответа" - уже некому. Страница перегрузилас.
Вообщем вам нужно, либо менить тип кнопки (что я предложил в "попробуйте..."), либо пытатся "задавить" дефолтную логику кнопки типа submit. Вешатся не на событеие onClick, а на submit и не кнопки, а формы... как-то так:
$("#form-id").submit(function(e){ ....Что-то делаем на сабмит формы..... // предотвращаем дефолтный обработчи e.preventDefault(); return false; });Но... это если вам уж реально нужна форма-сабмиты и т.п. Лично я - не вижу зачем. Проще сделать кнопку "простой кнопкой".
попробую со стороны ардуины отвечать ок-ями :)
Перед тем как добавалять - попробуте, все-таки, вначале руками урл дернуть. Велика вероятность что вы уже отвечаете OK-ями. Строчку "как отвечать", а копировал из кода выше по ветке. Так что - вероятно что вы уже отвечаете. По крайней мере "иногда" (не вникал, всегда ли отвечаете).
проблему примерно понял... ошибку в типе кнопки осознаю :)
Велика вероятность что вы уже отвечаете OK-ями.
мне кажется не отвечаю. вот на всякий случай текущий код
#include <SPI.h> #include <Ethernet.h> #define curtainOpenPIN 6 #define curtainClosePIN 7 #define leftRollUpPIN 30 #define leftRollDownPIN 31 #define rightRollUpPIN 32 #define rightRollDownPIN 33 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address byte ip[] = { 192, 168, 1, 177 }; // ip in lan byte gateway[] = { 192, 168, 1, 1 }; // internet access via router byte subnet[] = { 255, 255, 255, 0 }; //subnet mask EthernetServer server(80); //server port String readString; int rightButton = 29; int lightPin = 28; boolean lastRightBT = LOW; boolean currentRightBT = LOW; boolean lightON = false; void setup(){ // pinMode(13, OUTPUT); pinMode(curtainOpenPIN, OUTPUT); pinMode(curtainClosePIN, OUTPUT); pinMode(leftRollUpPIN, OUTPUT); pinMode(leftRollDownPIN, OUTPUT); pinMode(rightRollUpPIN, OUTPUT); pinMode(rightRollDownPIN, OUTPUT); pinMode(rightButton, INPUT); pinMode(lightPin, OUTPUT); digitalWrite(curtainOpenPIN, LOW); digitalWrite(curtainClosePIN, LOW); digitalWrite(leftRollUpPIN, LOW); digitalWrite(leftRollDownPIN, LOW); digitalWrite(rightRollUpPIN, LOW); digitalWrite(rightRollDownPIN, LOW); digitalWrite(28, LOW); //start Ethernet Ethernet.begin(mac, ip, gateway, subnet); server.begin(); Serial.begin(9600); } boolean debounce(boolean last) { boolean current = digitalRead(rightButton); if (last != current) { delay(5); current = digitalRead(rightButton); } return current; } //////curtain functions void curtainOPEN(){ digitalWrite(curtainOpenPIN, HIGH); delay(500); digitalWrite(curtainOpenPIN, LOW); } void curtainCLOSE(){ digitalWrite(curtainClosePIN, HIGH); delay(500); digitalWrite(curtainClosePIN, LOW); } void curtainSTOP(){ digitalWrite(curtainOpenPIN, HIGH); digitalWrite(curtainClosePIN, HIGH); delay(500); digitalWrite(curtainOpenPIN, LOW); digitalWrite(curtainClosePIN, LOW); } ///////roll functions void leftRollUP(){ digitalWrite(leftRollUpPIN, HIGH); delay(500); digitalWrite(leftRollUpPIN, LOW); } void leftRollDOWN(){ digitalWrite(leftRollDownPIN, HIGH); delay(500); digitalWrite(leftRollDownPIN, LOW); } void leftRollSTOP(){ digitalWrite(leftRollUpPIN, HIGH); digitalWrite(leftRollDownPIN, HIGH); delay(500); digitalWrite(leftRollUpPIN, LOW); digitalWrite(leftRollDownPIN, LOW); } void rightRollUP(){ digitalWrite(rightRollUpPIN, HIGH); delay(500); digitalWrite(rightRollUpPIN, LOW); } void rightRollDOWN(){ digitalWrite(rightRollDownPIN, HIGH); delay(500); digitalWrite(rightRollDownPIN, LOW); } void rightRollSTOP(){ digitalWrite(rightRollUpPIN, HIGH); digitalWrite(rightRollDownPIN, HIGH); delay(500); digitalWrite(rightRollUpPIN, LOW); digitalWrite(rightRollDownPIN, LOW); } void loop(){ currentRightBT = debounce(lastRightBT); if (lastRightBT == LOW && currentRightBT == HIGH) { lightON = !lightON; } lastRightBT = currentRightBT; digitalWrite(lightPin, lightON); // Create a client connection EthernetClient client = server.available(); if (client) { while (client.connected()) { if (client.available()) { char c = client.read(); //read char by char HTTP request if (readString.length() < 100) { //store characters to string readString += c; //Serial.print(c); } //if HTTP request has ended if (c == '\n') { /////// curtain control if(readString.indexOf("?curtainOPEN") >0){ curtainOPEN(); } else if(readString.indexOf("?curtainCLOSE") >0){ curtainCLOSE(); } else if(readString.indexOf("?curtainSTOP") >0){ curtainSTOP(); } ////// left roll control else if(readString.indexOf("?leftRollUP") >0){ leftRollUP(); } else if(readString.indexOf("?leftRollDOWN") >0){ leftRollDOWN(); } else if(readString.indexOf("?leftRollSTOP") >0){ leftRollSTOP(); } /////// right roll control else if(readString.indexOf("?rightRollUP") >0){ rightRollUP(); } else if(readString.indexOf("?rightRollDOWN") >0){ rightRollDOWN(); } else if(readString.indexOf("?rightRollSTOP") >0){ rightRollSTOP(); } //////// light on off else if(readString.indexOf("?lightON") >0){ lightON = HIGH; } else if(readString.indexOf("?lightOFF") >0){ lightON = LOW; } //////// light on off //////// scenes else if(readString.indexOf("?sceneNIGHT") >0){ curtainCLOSE(); leftRollDOWN(); rightRollDOWN(); } delay(1); //stopping client client.stop(); //clearing string for next read readString=""; } } } } }изменил тип кнопки - ничего не поменялось.
<input id="curtain_open" type="button" data-icon="arrow-l" data-iconpos="left" value="Open"> <input id="curtain_close" type="button" data-icon="arrow-r" data-iconpos="left" value="Close"> <input id="curtain_stop" type="button" data-icon="delete" data-iconpos="left" value="Stop">добавил посылку ок - тоже никакого эффекта
https://dl.dropboxusercontent.com/u/28876156/Screen%20Shot%202013-07-15%20at%2010.19.34%20PM.png
/////// curtain control if(readString.indexOf("?curtainOPEN") >0){ client.println("HTTP/1.1 200 OK"); curtainOPEN(); } else if(readString.indexOf("?curtainCLOSE") >0){ client.println("HTTP/1.1 200 OK"); curtainCLOSE(); } else if(readString.indexOf("?curtainSTOP") >0){ client.println("HTTP/1.1 200 OK"); curtainSTOP(); }дергал руками - вот что кажет:
https://dl.dropboxusercontent.com/u/28876156/Screen%20Shot%202013-07-15%20at%2010.11.03%20PM.png
НО при этом ардуина воспринимает команду и делает что от нее требуется
вот еще кое-что новое заметил:
https://dl.dropboxusercontent.com/u/28876156/Screen%20Shot%202013-07-16%...
вот еще кое-что новое заметил:
https://dl.dropboxusercontent.com/u/28876156/Screen%20Shot%202013-07-16%...
Вот последнее - уже больше похоже на правду. По крайней мере видно, что ваш javascript пытается дергать ардуину, а вот ее ответ - обрезается из секьюрных соображений.
Это как раз случай: "А еще - стоит на вкладочку Console заглянуть. Убедится что там никаких ошибок не светится. Вдруг браузер срубил запрос по соображениям секьюрности"
Вообщем это означает что мы пытаемся сделать "кросс-доменный запрос". Когда html/javascript у нас загружены с одного домена (192.168.1.1), а запрос мы пытаемся сделать к другому домену (192.168.1.177). Упоминал и про это в сообщении #4 :) К javascript-ту это ограничение -тоже относится.
Вообщем тут у вас есть два пути:
1. Ответом дуины должен быть не html, а JSONP (JSON - тоже не пропустит, нужно именно JSONP). Впрочем если мы не анализуем что ответила дуина, возможно "ответ и не важен", главное "попросить у нее именно JSONP. Скажем с помощью jQuery.getJSON() | jQuery API Documentation и не забыть добавить в запрашиваемый URL "callback=?" - что-бы поняло что мы ждем не JSON, а JSONP
Можно еще попробовать jQuery.ajax() | jQuery API Documentation, у него в опциях есть "crossDomain (default: false for same-domain requests, true for cross-domain requests)" - но, если честно не пробовал никогда.
2. Вторым вариантом - это что-бы в ответе дуины, кроме HTTP200 был еще тот самый заголовок:
"Access-Control-Allow-Origin: *" - разрешить кросс доменный запросы с любых доменов
Или
"Access-Control-Allow-Origin: http://192.168.1.1" - разрешить с конкретного домена (так безопасней)
Возможно еще потребуется что-то типа
"Access-Control-Allow-Methods: GET,OPTIONS"
В этом варианте - внесения изменений в клиентскую часть - не должно потребоваться.
ура! спасибо leshak огромное!
помог вариант "Access-Control-Allow-Origin: *"
теперь никаких ошибок. но вот еще один блудняк: у меня сделано 2 таба с помощью navbar. по дефолту у меня таб "Control". открываю index.html. все работает. перехожу на другой таб, и кнопки там не работают. как только обновляю страницу - начинают работать. до перехода на другой таб. в чем может быть загвоздка? сделал видео чтоб было понятней что я имею ввиду. там видно реакцию на нажатие кнопок - появляются строки внизу экрана, и при переходе на другой таб - не появляются. потом обновляю страницу и все начинает работать в пределах текущего таба
http://www.youtube.com/watch?v=UmXx18QtnM8&feature=youtu.be
вот коды обеих страниц
index.html
scenario.html
и еще вопросик. можно ведь каким-то способом передавать значения с ардуины в jquery? например, для светильника у меня сделаны и физические кнопки (простые тактовые на цифровой вход + реле на вкл светильника), и toggle switch на странице. можно сделать так, чтоб ардуина при включении-выключении света с физ. кнопки двигала и переключатель на странице. заодно таким способом была бы обеспечена синхронизация состояния на всех клиентских планшетах/телефонах/компах
ура! спасибо leshak огромное!
помог вариант "Access-Control-Allow-Origin: *"
Ага. А загуглили эту ошибку - то и сами бы нашли ответ :)
Простите. Но это уже "работа над проектом" :) Отлов багов и поиск "почему не работает" это, зачастую, 80% всей работы. А когда "поймал", то исправить уже дело одной строчки (как прошлая проблема).
Тем более что вам - это намного проще сделать. Не буду же я у себя все это поднимать. А вам - открываете консольку, смотрите есть ли какие-то ошибки в ней, смотрите нет ли где 404 ошибок, натыкиваете console.log в свои скрипты, смотрите "куда доходит выполнение, куда нет". не срабатывает обработчик кнопки или уже ajax код, пошагово дебагером проходите и смотрите соотвествуетли реальныей процесс тому что ожидалось.... вообщем место-то "много". Описать все возможные причины в режиме "проверте то, провертье это..." - это очень долго.
Да и, в конце концов - это уже все довольно далеко от тематики форума :)
и еще вопросик. можно ведь каким-то способом передавать значения с ардуины в jquery?
Вот прямо так "взять и передать" -нет. jQuery умеет только отсылать запросы.
Конечно обходные пути возможны (и все они будут, в какой-то степени компромисами, имеют свои недостатки. особенно учитывая ограниченность дуины): long polling, web-sokets, тупо часто опрашивать дуину, завести промежуточный сервер, на которые дуина будет слать отчеты...
Вообщем это задача на порядок сложней. Требует и "натурных эксперементов" и с большой вероятностью пересмотра всей архитектуры решения.
А по вашему коду. Вы программист или где? Где же здоровая лень? Это для бухгалтера нераздумчивая усидчивость - благо. А девиз програмера "компьютер должен работать, а человек - думать".
Ну вот не лень вам было набивать столько однотипных
$("#id-light").change(function() { if($(this).val()=='on') { $.get("<a href="http://192.168.1.177/?lightON" rel="nofollow">http://192.168.1.177/?lightON</a>") } });Ну хоте-бы "192.168.1.177" - можно было вынести в отдельную переменную что-бы если дуина сменит адресс - менять его в одом месте, а не 50-ти.
А потом увидить, что отличие всех обработчиков, вообщем-то уже толкко в имени параметра передаваемого. Ну значит вместо 10-тка обработчиков можно один использовать.
Присвоить всем своим кнопкам какой-то класс, скажем <a class="arduinoButton"
Самой же кнопке, сразу прописать "что там нужно дуине передевать. Получится
<a class="arduinoButton" data-command="stopALL"
Ну и обработчик вешать уже по селектору класса. Один - сразу на все.
$(".arduinoButton").click(function(){ $.get(arduinoUrl+"/?"+$(this).data("command"))Вообщем "меньше кода" - меньше шансов на ошибку. Меньше хадкодинга - больше шансов на повторное использование кода.
И еще - опять у вас <input type="submit" видно. Зачем вам submit-ы? Вы отправляете формочку на сервер и что-то там с ней делаете?
Простите. Но это уже "работа над проектом" :) Отлов багов и поиск "почему не работает" это, зачастую, 80% всей работы. А когда "поймал", то исправить уже дело одной строчки (как прошлая проблема).
ясненько, значит буду тыкаться. попробую заново сгенерить эти страницы, может поможет...
А по вашему коду. Вы программист или где? Где же здоровая лень?
вообще ни разу не программист. если б я им был - то вряд ли что-нибудь спрашивал бы. а учиться видимо уже поздно, либо вообще не дано - я просто физически не воспринимаю это. ну зато с железом у меня нет проблем :)
за ценные замечания огромное спасибо, обязательно буду применять :)
И еще - опять у вас <input type="submit" видно. Зачем вам submit-ы? Вы отправляете формочку на сервер и что-то там с ней делаете?
это так конструктор сгенерил. как бы оно работало - и внимания не обращал...
проблему с навбаром решил путем объединения двух страниц в одну