Максим Череватов: Напишите, пожалуйста, к каждой строчке вашего JS-кода, комментарий - что вы ожидаете получить в результате ее выполнения, не могу понять, в какой момент вы упускаете нить.
Sergey Romanov: Вопрос старый, но может быть вам пригодится - ответ сервера может содержать Access-Control-Max-Age, который указывает срок кеширования preflight-запроса. Т.е. в течение этого времени preflight-запросы отправляться не будут (на тот же ресурс, само собой)
Это можно разрулить как на уровне прокси-сервера, так и на уровне ноды.
В ноде можете поставить * в самый конец. Тогда он сработает только если запрос не был обработан предыдущими обработчиками.
vasIvas: не помню, если честно. Как-то он мне больше приглянулся. По-моему runtime у него поменьше размером. Вроде как traceur на java написан, но могу ошибаться.
Илья: Не в настройках апача, а ваше серверное приложение, реализующее API, должно уметь правильно отвечать на OPTIONS-запрос. Почитайте про CORS, там не квантовая механика.
Но все это нужно только если вам действительно нужно со сторонних доменов обращаться к апи. Если в рабочем режиме домен, на котором будет висеть скрипт, и домен апи будут совпадать, то можно в браузере отключить политику CORS на время разработки.