2013-09-23 92 views
-3

我有以下幾點:Node.js的快遞AJAX GET返回404

$.get('path/to/file.js', function(data) { 
    //this callback function never runs! 
}); 

爲什麼沒有回調被調用? :S

+0

檢查您的控制檯,請求是否通過?節點說什麼? – tymeJV

+0

是發佈console.log(req.url)的輸出; – Gaurav

+0

和什麼:S是什麼意思? – Gaurav

回答

2

的參數是for a success callback

jQuery.get(URL [,數據] [,成功(數據,textStatus,jqXHR)] [,的dataType])

並且404Not Found)響應被jQuery視爲error。通常,只有200(OK)或各種3xx響應被視爲「成功」。

使用jQuery 1.5和更高版本,從jQuery的Ajax方法返回的jqXHR對象實現了Deferred objects,因此您可以使用.fail()來添加這樣的回調。

$.get(...).fail(function (xhr, textStatus, errorThrown) { 
    console.log('Ajax error', textStatus, errorThrown); 
}); 

如果你想知道爲什麼它得到一個404,這取決於所使用的實際路徑。但是,示例路徑將與當前頁面的地址相關。

http://yourdomain.tld/foo/bar/page + path/to/file.js = 
http://yourdomain.tld/foo/bar/path/to/file.js 

您可以嘗試指定相對到根路徑可以通過使用主機後/開始,這將使用它作爲一個共同的出發點:

$.get('/path/to/file.js', ...); 
http://yourdomain.tld/foo/bar/page + /path/to/file.js = 
http://yourdomain.tld/path/to/file.js 
+0

好的。那麼當我在瀏覽器中手動訪問它時,它會給我200 OK。出於某種原因,當我使用AJAX時,我得到了404。儘管我使用express框架來使用node.js。 –

+0

實際上,它返回200 OK,但是有一個parseError。所以它認爲JSON由於某種原因無效。但是,我拿走了JSON並前往jsonlint.com並驗證了json,jsonlint返回了Valid。 –

+0

@PetterThowsen是來自靜態文件還是路由的JSON?如果它來自文件,它保存了什麼編碼? UTF-8可能是最好的。但是,它是否有[BOM](https://en.wikipedia.org/wiki/Byte_order_mark)?如果是這樣,看看你是否可以保存沒有它。或者,如果來自路由,響應是否包含除JSON之外的其他內容? JSON是如何產生的?是否指定了「Content-Type」? –