2012-08-03 165 views
2

我一直在做這樣一來,與JSONP:

$.ajax({ 
    url   : 'http://domain.local/api/3/authentication/get-token', 
    type  : 'POST', 
    dataType : 'jsonp', 
    data  : 'username=user&secret=pass', 
    success  : function(data) { 
     console.log(data); 
    } 
}); 

它與老版本的jQuery完美的作品(1.3,1.4),但似乎沒有使用最新版本(自1.5.x以來,它使得一個奇怪的GET或OPTION請求)

任何想法如何解決?

謝謝!

+0

不知道爲什麼它會用舊JQ版本的工作,但跨域JSONP請求插入腳本標籤,不與POST在所有的工作,至少據我所知? – adeneo 2012-08-03 21:39:53

+0

它適用於1.4.x,POST方法和jsonp,但不是最新的,我剛剛測試過它 – guillaumepotier 2012-08-03 22:10:54

回答

0

jquery的新版本一直在爲我工作。我認爲問題在於您使用POST請求,而JSONP不允許這樣做:

您無法使用JSONP進行POST ......它不會以這種方式工作,它會創建一個元素獲取數據...必須是GET請求。除了張貼到自己的域名作爲發佈到其他域名的代理之外,你沒有太多可以做的事情,但是用戶不能直接做到這一點,並看到一個響應。

How to use type: "POST" in jsonp ajax call

您的電話應該是這樣的:

$.ajax({ 
    url   : 'http://domain.local/api/3/authentication/get-token', 
    type  : 'GET', 
    dataType : 'jsonp', 
    data  : 'username=user&secret=pass', 
    success  : function(data) { 
     console.log(data); 
    } 
}); 

如果上述方法無效,嘗試尋找在使用螢火蟲發出的參數。 jQuery應發送一個「回調」參數,其值爲「jQuery1710013558088336139917_1344030860953」。

也看看服務器的響應。服務器應該返回來返回數據,如下所示:

jQuery1710013558088336139917_1344030860953({"data":"goes here"}) 
+0

jQuery應該在使用JSONP的數據類型時自動使用GET,所以將類型設置爲POST不應該是真的導致一個錯誤,但考慮到正確的情況下,我猜想什麼是可能的? – adeneo 2012-08-03 21:50:09

+0

應該,但我們必須去核心來確認。最好只是讓它開始,但因爲它是必須的。 – 2012-08-03 21:53:01

+0

感謝您的回答。但它與1.4.x完美兼容,但不能使用POST方法。爲什麼改變:(在我的API中我想使用POST/PUT/PATCH來符合REST,並且不能使用$ .ajax測試它們的文檔真的困擾我:( – guillaumepotier 2012-08-03 22:09:41