2013-03-20 55 views
2

工作的一個RESTful API,因此當我訪問這在我的瀏覽器在96.126.111.211/getLeaderBoardNode.js的快遞jQuery的Ajax請求不工作

它工作正常,使我能蒙戈數據庫中的JSON數據。

雖然當我嘗試這樣http://jsfiddle.net/yVQ5T/我得到一個JSONP錯誤

Error: jQuery171037622810900211334_1363808084624 was not called

這裏一個jQuery Ajax請求是在服務器端的代碼

getLeaderBoard(req, res) 
{ 
    this.db.collection(this.settings.userTable, function(err, collection) => { 
     collection.find().toArray(function(err, items) { 
      res.writeHead(200, {'Content-Type': 'application/javascript'}); 

      res.write(JSON.stringify(items)); 

      res.end(); 
     }); 
    }); 
} 
+1

您是否使用快速使用還是我只是拉從標題和標籤?如果你使用Express,你應該使用他們的高級響應函數,比如'res.json(items)',或者更具體地說'res.jsonp(items)',它可以解決你的問題。除非您有特殊情況,否則無需手動將數據寫入Express的響應(或結束)。此外,Node.js中的良好做法是顯式返回每個函數中的最終語句,以確保當您希望離開它時保留它。 – 2013-03-20 19:50:59

回答

1

您的網址提供定期JSON不是JSONP,你必須把它放在回調函數的調用中,例如

jQuery171037622810900211334_1363808084624 ([{"userId":"100821494565115211032","winCount":4,"_id":"5148caa1a1651dff12000002"}]); 

由於回調名稱是動態生成的,您必須從請求中讀取它們。

+0

啊我看到了,所以我需要做那個服務器端。我會試一試,謝謝。 – 2013-03-20 19:44:34

+0

@Ciarán是的,你應該在服務器上處理這個,但Express會處理你的回調和響應格式,你不必擔心。如果您使用的是Express 3.0+,則只需使用'.jsonp({})' – 2013-03-20 19:47:04

+0

更改您的'.json({})'調用就可以了。謝謝您的幫助! – 2013-03-20 19:57:24

1

如果您使用的是Express 3.0,您可以查看response.jsonp,它與response.json的使用方式相同。如果您從另一個域訪問您的服務器,則由於瀏覽器實施的跨域請求限制作爲安全措施,您將不得不使用JSONP協議。

在快遞2.x中,你將需要啓用JSONP響應通過app.enabled("jsonp callback")處理,然後response.json

3.0 Api

2.0 Api

+0

謝謝你的res.jsonp(數據)完美工作。 – 2013-03-20 19:50:01