Некоторая информация о настройке: мы используем jQuery для AJAX (и других вещей, но AJAX относится к этому вопросу), Node w / Express для сервера и Chrome 17 / Firefox 10 для тестирования (нам не нужносовместимость с IE).
Проблема, с которой мы сталкиваемся, заключается в невозможности получить ответ при выполнении междоменного запроса к Node-серверу.В целях разработки (а также потому, что нам нужно запустить Apache в дополнение к этому серверу на данный момент), мы запускаем сервер узла на порту 3001 (localhost: 3001), который даже на 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, которая была исправлена.В любом случае мы больше не сталкиваемся с этой проблемой.