[英]Trouble understanding JSONP with jQuery
如果我希望從遠程服務器獲取數據,那么我相信JSONP是首選工具。 但是我看到的一個例子使我感到困惑:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
dataType: 'jsonp',
data: 'p3=c',
jsonp: 'callback',
url: 'http://someserver.com/app?p1=a&p2=b',
success: function (data) {
console.log("data="+data);
$.each(data, function (i, r) {
console.log("i="+i);
console.log("r="+r);
});
},
});
});
</script>
我可以看到,在請求中,添加了一個回調參數,其值的格式為jQuery1234567890。 當我查看處理該請求的應用程序時,它會從請求中提取回調參數,並包裝要返回的json數據以及相應的括號,因此最終返回如下內容:
jQuery1234567890([{"x":"100","y":"101"},{"x":"200","y":"201"}])
所以我的第一個問題是:
(1)應用是否正確完成了已有的工作?
(2)jQuery / JSONP實際上為我們做了什么?
我以為jQuery將看到“ jsonp”的dataType,將腳本標簽插入DOM,然后瀏覽器將下載並執行腳本。 如果是的話,jQuery是否創建了函數jQuery1234567890,其實現是將參數傳遞給成功函數?
(3)我的理解正確嗎(我認為不是)?
謝謝,
保羅
(1)應用是否正確完成了已有的工作?
是的,這是正確的JSONP格式
(2)jQuery / JSONP實際上為我們做了什么?
通過在請求中放置&callback=jQuery1234567890
通知服務器應用程序需要JSONP
我以為jQuery將看到“ jsonp”的dataType,將腳本標簽插入DOM,然后瀏覽器將下載並執行腳本。 如果是的話,jQuery是否創建了函數jQuery1234567890,其實現是將參數傳遞給成功函數?
(3)我的理解正確嗎(我認為不是)?
是的,您的理解是正確的。 它創建了一個帶有jQuery1234567890
函數的script
,該腳本在加載請求的腳本時被調用。 正如您所說的,該參數接收數據並將其傳遞給$.ajax
內部函數,后者將調用success
回調
從ajax
文檔獲取jsonp
選項:
覆蓋jsonp請求中的回調函數名稱。 將使用此值代替'callback =?'中的'callback'。 網址中查詢字符串的一部分。 因此{jsonp:'onJSONPLoad'}將導致'onJSONPLoad =?' 傳遞給服務器。
因此,使用jsonp: 'callback'
覆蓋callback
有callback
,基本上是什么都不做。
您看到的其他內容是由jQuery生成的,因此您不必自己做。 您可以像對待jquery中的任何其他ajax請求一樣簡單地對待此請求,而不必擔心jsonp的實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.