2013-08-05 194 views
0

我有我的本地測試驅動器上運行以下腳本。它導入一個JSON文件並構建一個網頁,但由於某種原因,在處理數據時出現錯誤。沒有數據顯示...JSONP ajax回調失敗

但是,每當我使用(相同)數據硬編碼,我得到我想要的結果。因此,這讓我覺得它是與我辦理JSON進口的方式......

這是我的AJAX回調:

getGames: function(fn) { 
    $.ajax({ 
      type: "GET", 
      url: App.Config('webserviceurl')+'games-payed.js', 
      dataType: "jsonp", 
      success: function (data) { 
       console.log('streets', data); 
       if(fn){ 
        fn(data); 
       } 
      }, 
      error: function (msg) { 
       if(fn){ 
        fn({status:400}); 
       } 
      } 
    }); 
} 

而這種代碼是不工作,我也沒有收到在我的控制檯任何錯誤...

當我打開硬編碼的數據,它完美的作品:

getGames: function(fn) { 
    var games = App.Config('dummyGames'); 

    if(fn){ 
      fn(games); 
    } 
} 

是不是有什麼毛病我AJAX的回調?

編輯: JSON文件看起來是這樣的:

jsonp1({ 
    "status": "200", 
    "data": [ 
     { 
      "id": "1", 
      "title": "Title 1", 
      "publishDate": "2013-03-27T15:25:53.430Z", 
      "thumbnail": "images/thumbs/image_game1.png", 
      "html5": "http://mysite.com/index.html" 
     }, 
     { 
      "id": "2", 
      "title": "Title 2", 
      "publishDate": "2013-03-20T15:25:53.430Z", 
      "thumbnail": "images/thumbs/image_game2.png", 
      "html5": "http://mysite.com/index.html" 
     }, 
     { 
      "id": "3", 
      "title": "Title 3", 
      "publishDate": "2013-03-18T15:25:53.430Z", 
      "thumbnail": "images/thumbs/image_game3.png", 
      "html5": "http://mysite.com/index.html" 
     } 

    ] 
}); 
+0

如果您登錄錯誤回調,您是否在控制檯中看到任何內容?是「遊戲支付」的錯字?你在瀏覽器的網絡標籤中看到了什麼? –

+0

你能告訴我們'games-payed.js'的樣子嗎?關於_payed_:http://english.stackexchange.com/questions/92547/paid-vs-payed tldr;使用**付費** – Halcyon

+0

關於「付費」的命名,這是我們從客戶端獲得的服務,所以我無法控制命名:)我添加了JSON文件的片段。 – Michiel

回答

2

在你的榜樣,我看到你包裹裏jsonp1您的JSON數據。我想這是一個固定的名字。如果是這樣的話,試試這個:

getGames: function(fn) { 
    $.ajax({ 
      type: "GET", 
      url: App.Config('webserviceurl')+'games-payed.js', 
      jsonp: false, 
      jsonpCallback:"jsonp1", 
      dataType: "jsonp", 
      success: function (data) { 
       console.log('streets', data); 
       if(fn){ 
        fn(data); 
       } 
      }, 
      error: function (msg) { 
       if(fn){ 
        fn({status:400}); 
       } 
      } 
    }); 
} 

通知的jsonpCallback:"jsonp1"jsonp: false。原因是:默認情況下,jquery會自動隨機生成回調函數名稱,並將?callback=generatedFunctionName附加到網址的末尾。由於回調參數,服務器端的代碼可以使用相同的函數名稱在瀏覽器上調用回調函數。

在你的情況,你使用固定函數名(jsonp1),所以你必須:明確使用jsonpCallback="jsonp1"

  • 設置jsonp = false到以免jQuery添加

    • 指定您的函數名「?callback」字符串到URL或嘗試使用「=?」進行轉化。