Некоторая информация о настройке: мы используем jQuery для AJAX (и другие вещи, но AJAX относится к этому вопросу), Node w / Express для сервера и Chrome 17 / Firefox 10 для тестирования (нам не нужна совместимость с IE ).
Проблема, с которой мы сталкиваемся, - это невозможность получить ответ при выполнении междоменного запроса к серверу Node. В целях разработки (а также потому, что на данный момент мы должны запускать Apache в дополнение к этому серверу), мы запускаем сервер узла на порту 3001 (localhost: 3001), который даже на localhost считается браузером перекрестным доменом (на по крайней мере, по моему опыту, пытаясь заставить два сервера на localhost разговаривать друг с другом).
У меня установлен app.enable("jsonp callback")
на сервере, который прекрасно работает для наших GET
маршрутов, однако, похоже, он не так хорошо работает для наших POST
маршрутов (сейчас это все в нашей компании, но лучшие альтернативы приветствуются в качестве предложений).
Рассматриваемый маршрут определяется следующим образом:
app.post("/create", function(req, res) {
// Added the next 3 lines as a test and it seemed to add success,
// not happy with it though
var ref = req.header("Referer");
res.header("Access-Control-Allow-Origin", ref);
res.header("Access-Control-Allow-Methods", "POST");
console.log(req.body); // echo request body
res.json({success: true}); // return a notification of success
});
Запрос AJAX выглядит так:
// The URL is either the IP of the server or Localhost
$.ajax({
url: "http://localhost:3001/create",
data: {
name: "john"
},
crossDomain: true,
type: "POST",
dataType: "json",
success: function(r) {
console.log(r);
},
error = function() {
alert("Failed");
}
};
Некоторая второстепенная информация: когда мы используем вышеуказанное в Firefox с dataType: "jsonp"
, он просто терпит неудачу с 404
, но фактически отправляет запрос только с "json"
. Еще одна информация: без crossDomain: true
запрос вообще не работает. Запросы Firefox, сделанные с помощью вышеупомянутого, фактически проходят на сервер, однако он выдает ошибку до получения ответа.
Запрос работает нормально и успешно выполняется в Chrome, но не работает в Firefox. Согласно консоли ответ возвращает статус «200 OK», но он по-прежнему запускает функцию ошибки jQuery.ajax с statusCode
0
и statusText
Error
(что очень полезно ...) и несмотря на то, что мы пробовали мы не добились каких-либо успехов в выполнении этой работы.
Мы очень ценим любую помощь или указания, куда обратиться для решения этой проблемы.
ОБНОВЛЕНИЕ
Просто ради обновления. Эта проблема перестала возникать, возможно, это была какая-то основная ошибка в нашем коде, которую мы исправили в процессе рефакторинга, не осознавая этого, или это была ошибка в Firefox, которая была исправлена. В любом случае мы больше не сталкиваемся с этой проблемой.