2012-04-23 131 views
10

我使用jQuery的$.ajax方法從JSONP兼容的Web服務中獲取數據,並且只要獲得響應並在我的HTML中顯示接收到的數據,一切似乎都正常工作。但是,我一直無法讓ajax方法的成功回調觸發。什麼是更奇怪的是,即使我得到來自服務的有效響應,錯誤回調總是被解僱。jQuery ajax成功回調沒有射擊

下面是一個簡單的js函數的一個例子,我做測試此:

function doJsonp() 
{ 
    $.ajax({ 
     url: "http://example.com/api/service?callback=blah", 
     dataType: "jsonp", 
     crossDomain: true, 
     success: function() { console.log("success"); }, // This is never fired 
     error: function() { console.log("error"); } // This is always fired 
    }); 
} 

和匹配回調函數:

function blah(data) 
{ 
    console.log(data); // This is called properly 
} 

從這所以這裏閱讀類似的問題和其他地方,它似乎這通常是由返回未驗證的JSON服務引起的。對於我而言,我使用的是內部的Web服務,但也嘗試過其他JSONP服務,以及如來自Flickr提供的,例如:

http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&jsoncallback=blah

無論是JSON來自Flickr的服務和礦山驗證使用jsonlint,所以似乎並不是問題,據我所知。

在尋找這個問題的解決方案,我一直在使用一個jQuery插件,名爲jQuery的JSONP,在http://code.google.com/p/jquery-jsonp/發現嘗試。這取代了jQuery的$.ajax電話與自己$.jsonp所以上面的代碼如下所示:

function doJsonp() 
{ 
    $.jsonp({ 
     url: "http://example.com/api/service?callback=blah", 
     success: function() { console.log("success"); }, 
     error: function() { console.log("error"); } 
    }); 
} 

然而,結果是相同的,並且成功回調永遠不會觸發。任何幫助或在正確的方向微調將不勝感激!

+1

什麼是服務器響應? !「http://example.com/api/service?callback=blah」 =你的函數名的Bleh:您可以在develeopers工具,如蜻蜓(歌劇),螢火蟲(火狐),開發工具(鉻) – 2012-04-23 11:58:52

+0

網址找到它()。可能是一個錯字? – mayrs 2012-04-23 12:03:46

+0

@BartoszGrzybowski服務器響應狀態是200 OK – Limescale 2012-04-23 12:20:11

回答

4

定義通過jsonpCallback -option回調函數,而不是URL裏面:

function doJsonp() 
{ 
    $.ajax({ 
     url: "http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&jsoncallback=?", 
     dataType: "jsonp", 
     crossDomain: true, 
     jsonpCallback:'blah',//<<< 
     success: function() { console.log("success"); }, 
     error: function() { console.log("error"); } 
    }); 
}