2010-08-03 12 views
13

Mam następujących funkcji w pliku .js w index.htmlJquery: Bieganie AJAX lokalnie bez serwera WWW

function getValues(){ 

$.ajax({ 
    type: 'POST', 
    url: "http://localhost/getData/getdata.php", 
    success: function(data){ 
    var dataValues; 
    var apnd; 

    dataValues = String(data.NSE); 
    apnd = "a"; 
    updateValues(dataValues, apnd); 

    dataValues = String(data.BSE); 
    apnd = "b"; 
    updateValues(dataValues, apnd); 
    }, 
    dataType: "json" 
}); 

} 

to działa prawidłowo, gdy uruchomię go w serwer WWW jak wamp. Ale chcę uruchomić plik index.html lokalnie, tj. Bez serwera WWW, użytkownik po prostu podwójnie klika index.html i powinien działać, ale tak nie jest. dane są zawsze zerowe. Jaki może być problem? Przepraszam, jestem super JQuery Noob.

kod w getdata.php pliku jest

<? 

echo json_encode(array("NSE"=>rand(5000, 20000),"BSE"=>rand(5000, 20000))); 

?> 
+1

Proszę wyjaśnić jedną rzecz, czy nadal publikujesz (wykonując połączenie AJAX) na serwer WWW, mimo że używasz strony internetowej bez serwera WWW? –

+1

Proponuję użyć 'php -S localhost: 80', aby uruchomić prosty serwer WWW. – ahui

Odpowiedz

3

Nie można tego zrobić, należy otworzyć plik HTML również od adresu serwera WWW np http://localhost/yoursite/file.html lub nawet zdalnego adresu URL serwera. Musisz przejść przez URL serwera/serwera.

7

AJAX potrzebuje serwera WWW do komunikowania się, aby móc pobrać dowolne dane; poza tym to po prostu rozmowa ze ścianą. Uruchomienie skryptu bez serwera WWW przypomina próbę nawiązania połączenia bez usługi komórkowej. : D

6

Serwer internetowy jest dokładnie tym, który obsługuje wszystkie szczegóły.

Nie można POST bez serwera WWW do opublikowania. HTTP = protokół sieciowy, więc nie możesz mieć adresu URL HTTP bez docelowego serwera WWW.

Serwer internetowy jest również procesem, który pobiera Twoją prośbę o stronę PHP i uruchamia interpreter PHP, zarządzając wejściami i wyjściami.

Dlaczego chcesz uruchomić go lokalnie?

+2

Myślę, że działa on lokalnie na stronie, (przez C: \ ... \ index.html), ale wciąż wysyła żądanie do serwera WWW (z php). Myślę, że jest to problem z skryptem krzyżowym (patrz moja odpowiedź), a nie problemem z analizą składni. –

+0

tak dokładnie jak Bob mówi – Steven

3

Przeczytaj SOP. Dostęp do danych z domeny innej niż bieżąca jest blokowany ze względów bezpieczeństwa.

+4

Nie sądzę, że jest to istotne dla jego problemu. –

15

Po uruchomieniu pliku index.html z pliku działa AJAX. Ale problem występuje, ponieważ przeglądasz plik pod adresem "file: //....../index.html" i robisz żądanie AJAX do "http://localhost/..../something.php", które NIE JEST DOZWOLONE z powodu skryptów cross site. Wszystkie żądania AJAX muszą przejść do tej samej domeny/serwera.

Jest to założenie, że przeglądasz plik, klikając go dwukrotnie i wciąż wysyłając żądanie AJAX do serwera WWW.

+0

Nie wiedziałem tego. dziękuję – Steven

+0

Ponadto, nie działałoby, nawet jeśli URL był względny, w przeciwnym razie strona uruchomiona na dysku CD miałaby dostęp do całego systemu plików. –

3

Jestem łaskotało różowy z siebie, ponieważ czytając odpowiedź o tym, jak ludzie zamieszczone nie można zrobić AJAX „lokalnie” bez let serwera WWW mnie do rozwiązania, w jaki sposób możesz to zrobić. W przypadku JavaScriptu metody obiektu XMLHttpRequest() są najczęściej tworzone przez przeglądarkę i należy pominąć metodę wygenerowaną przez serwer sieci Web (xmlhttp.status == 200). Następujące prace:

<script> 
window.onload = function() { 

    var input = document.getElementById("input"); 

    input.onclick = function() { 
     var xmlhttp; 
     xmlhttp = new XMLHttpRequest(); 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4) { 
       document.getElementById("response").innerHTML = xmlhttp.responseText; 
      } 
     } 
     xmlhttp.open("GET", "response.html", true); 
     xmlhttp.send(); 
    } 
} 
</script> 
</head> 

<body> 
<h3>AJAX Request/Response</h3> 
<p></p> 
<input id="input" type="button" value="Call AJAX" /> 
<p></p> 
<div id="response"></div> 
+2

To nie jest już prawdą w najnowszych wersjach Chrome (błąd: "Żądania dotyczące różnych źródeł są obsługiwane tylko w schematach protokołów: http, dane, rozszerzenie chrome, https, chrome-extension-resource.") I Firefox (błąd: " Brak dostępu do zabronionego URI "). – adelphus

Powiązane problemy