Някои настройки за информация: Използваме 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, която е коригирана. Така или иначе вече не срещаме този проблем.