簡體   English   中英

使用jQuery無法理解JSONP

[英]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'覆蓋callbackcallback ,基本上是什么都不做。

您看到的其他內容是由jQuery生成的,因此您不必自己做。 您可以像對待jquery中的任何其他ajax請求一樣簡單地對待此請求,而不必擔心jsonp的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM