2015-10-01 32 views
8

Próbuję wykonać żądanie ajax POST na serwerze hostowanym lokalnie na moim laptopie, ale nie mogę uzyskać żadnych informacji z powrotem. Po kliknięciu przycisku na mojej stronie (localhost), widzę serwer przechodząc z powrotem poprawne informacje, ale na przednim końcu dostaję ten błąd:NetworkError: Nie powiodło się wykonanie 'send' na 'XMLHttpRequest'

error: NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load ' http://comp-ip '.

var param = JSON.stringify({varA:"varA",varB:"varB"}); 

$.ajax({ 
    type: "POST", 
    url: "http://comp-ip", 
    async: false, 
    data: param, 
    success: function(result, status, xhr){ 
    alert(result + ": " + status); 
    }, 
    error: function(xhr, status, err) { 
    alert(status + ": " + err); 
    } 
}); 

Wydaje się wyzwalanie błąd co czas, a nie "sukces". Czy ktoś ma pojęcie, co jest nie tak?

Edit: Próbowałem wysyłanie normalnego żądania POST bez AJAX i wyrzuca mi błąd 'niezdefiniowane', a także:

$(document).ready(function(){ 
    var param = JSON.stringify({varA:"varA",varB:"varB"}); 
    $("#btn").click(function(event){ 
      $.post( 
       "http://ip", 
       param, 
       function(data) { 
       $('#container').html(data); 
       } 
      ).fail(function(error) { alert(error.responseJSON) }); 
     }); 
}); 

innymi Próbowałem: 1) zmiana przeglądarki Safari (to samo, serwer zwraca informacje, ale strona dostaje błąd) 2) Ustawienie async = true z false. Z jakiegoś powodu, gdy ustawię go na wartość true, serwer w ogóle nie odpowiada. Gdy jest to fałsz, serwer odpowiada.

Odpowiedz

6

Miałem ten problem dosłownie kilka minut temu. Problem polega na tym, że musisz ustawić async:false na async:true. Nie wiem dokładnie, dlaczego to działa, chyba dlatego, że HTML5 jest nowszy niż XML.

Błąd jest nieco inna na tej stronie, ale myślę, że jest podobna: JavaScript console.log causes error: "Synchronous XMLHttpRequest on the main thread is deprecated..."

Aktualizacja

Cześć, jestem z powrotem z jakiegoś nowego i lepszego informowania. Pochodzenie krzyżowe występuje z portami, jak również domenami/adresami IP i prawdopodobnie będzie działać z najbardziej przyzwoitymi przeglądarkami. Jeśli chcesz wiedzieć, co się dzieje, spróbuj zmienić adres IP na localhost lub odwrotnie (jeśli korzystasz z localhost). Należy pamiętać, że ten problem może wystąpić również w przypadku korzystania z różnych portów. Aby uzyskać szybką poprawkę, upewnij się, że w nagłówkach z dowolnego serwera zaplecza umieszczasz poprawny nagłówek kontroli dostępu response.addHeader("Access-Control-Allow-Origin", "*");.

kod pochodzi z this question

+1

Cześć, dziękuję za odpowiedź. Próbowałem ustawić asynchroniczne na true z false, ale dziwnie mój serwer nie reaguje w ogóle. W przeciwieństwie do async = false, który mój serwer zwraca informacje. – Moo33

+0

Otrzymałeś niezdefiniowany błąd, co oznacza, że ​​URL dla metody post może być nieprawidłowy. Czy plik js znajduje się na serwerze? – ytpillai

+0

Ach tak, nie udało się załadować zasobu zdecydowanie oznacza, że ​​masz zły adres URL. Jakiego typu serwera używasz? – ytpillai

5

Był to problem, krzyż Pochodzenie zasobu (CORS). Mój serwer zwrócił mi prawidłowe informacje, ale moja przeglądarka odmówiła jej przyjęcia. Aby go naprawić musiałem dodać 2 linie na moim serwerze Java (nie mojej stronie), aby ustawić je jako nagłówek odpowiedzi:

yourownvariable.setHeader("Access-Control-Allow-Origin:", "origin url of your site"); 
yourownvariable.setHeader("Access-Control-Allow-Methods", "GET, POST,PUT"); 
+0

Cieszę się, że mogłem to naprawić – ytpillai

+0

Ten błąd wystąpił [tutaj] (http://stackoverflow.com/questions/20433655/no-access-control-allow-origin-header-is-present-on-the-requested-resource- lub) również – ytpillai

-3

można przetestować swoje strony internetowe z Chrome na Windows tak

chrome.exe --allow-file-access-from-files