Почему междоменный запрос работает в Chrome, но не работает в Firefox при запросе с сервера Node (Express)? - PullRequest
0 голосов
/ 29 февраля 2012

Некоторая информация о настройке: мы используем 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, которая была исправлена.В любом случае мы больше не сталкиваемся с этой проблемой.

1 Ответ

0 голосов
/ 29 февраля 2012

Предположим, вы хотите выполнять обратные вызовы в стиле JSONP, вам нужны две вещи: app.enable("jsonp callback") (не app.enable("json callback")). Кроме того, вам нужно указать jQuery выполнить вызов JSONP, указав callback=? в URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...