2012-04-01 15 views
7
url=require('url'); 

qs=require('querystring'); 

var http=require('http'); 

http.createServer(server).listen(1337, 'hostname'); 

function server(req, res) { 

    res.writeHead(200, {'Content-Type': 'text/plain'}); 

    res.write(req.url); 

    a=url.parse(req.url, true); 

    console.log(a); 

    res.end('\nHello World\n'); 

} 

console.log('Server running at http://127.0.0.1:1337/'); 




//http://host:1337/#A=1111111 <--- not coming in log or url 
//http://host:1337/?A=11111111 <--- works ok 

//usecase : facebook access_token url format is something similar to above 
+1

Gdy żądasz adresu URL, takiego jak ten http: // host: 1337/# A = 1111111, wysyła on to tylko do serwera http: // host: 1337/i ten fragment do przeglądarki # A = 1111111 Facebook pobiera ten adres lokalnie w przeglądarce, analizuje go i zmienia na zmienną pobierania taką jak ta: http: // host: 1337 /? A = 11111111 Następnie żądania danych przy użyciu AJAX, analizuje wszystkie dane i zapisuje je w przeglądarka. To jest stara technika, która wymaga zdarzenia "onhashchange", obecnie najlepszym sposobem na to jest wdrażanie pushState i zmienianie całego adresu URL bez odświeżania strony. – neojp

Odpowiedz

19

Część URL po znaku '#', zwany fragment, nie jest wysyłany do serwera. Jeśli przechowujesz dane w tym fragmencie, to od ciebie zależy przetwarzanie tych danych i wykonywanie żądania ajax z danymi w argumencie GET.

+2

Facebook odsyła z tym formatem do serwera dev przy użyciu http: // nazwa_serwera: port/ścieżka # access_token = somestring –

+0

Naprawdę szkoda, że ​​nie zamknęli tego pytania. Ten fragment na Facebooku jest naprawdę denerwujący. – Gavin