JSONP解決AJAX跨域程式碼範例

來源:互聯網
上載者:User


有兩個子網域名稱,a.xx.com和b.xx.com,現在我在a.xx.com一個頁面中發送ajax請求b.xx.com一個控制器中的方法,希望得到返回資料,但是返回狀態302,應該是跨域問題沒有解決。


解決ajax跨域問題的一個辦法是使用jsonp,jquery封裝了ajax方法和getJason方法,工作中也遇到了跨域問題,記錄一下jsonp的用法和樣本。

(function($) {
var url = '/scripts/jquery4u-sites.json?callback=?';
 
$.ajax({
   type: 'GET',
    url: url,
    async: false,
    jsonpCallback: 'jsonCallback',
    contentType: "application/json",
    dataType: 'jsonp',
    success: function(json) {
       console.dir(json.sites);
    },
    error: function(e) {
       console.log(e.message);
    }
});
 
})(jQuery);

這是jquery的ajax方法,使用jsonp的時候定義參數參考如上代碼。往往請求的url後面要帶一個?callback=?,問號後面可以帶參數,也可以留空。本例不做具體講解,只記錄用法。

 

/* Loading JSON objects using JSONP */
(function($) {
    var url = '/scripts/jquery4u.settings.json';
    $.ajax({
       type: 'GET',
        url: url,
        async: false,
        contentType: "application/json",
        dataType: 'jsonp'
    });
})(jQuery);

本例是直接請求json檔案。

$.getJSON('ajax/test.json', function(data) {
  var items = [];
 
  $.each(data, function(key, val) {
    items.push('<li id="' + key + '">' + val + '</li>');
  });
 
  $('<ul/>', {
    'class': 'my-new-list',
    html: items.join('')
  }).appendTo('body');
});

本例是使用jquery的getJSON方法請求,getJSON方法自動支援jsonp,是jQuery封裝好的。


<script>
    // 用戶端使用getJSON方法請求另一台機子上的指令碼
    // 瀏覽器會產生一個隨機的callback參數
    $.getJSON("/new/ajax_jsonp.php?callback=?",function(json){
        alert(json.website);
    });
</script>

getJSON跨域請求例子,注意url後面帶?callback=?,否則就是一般的請求json返回資料,不能跨域,帶這個,加不加參數視情況而定,就是jsonp跨域。

至於上文中講的參數後面帶個?callback=?,是這樣的:

從 1.2 版本開始,jQuery 擁有對 JSONP 回調的本地支援。如果指定了 JSONP 回調,就可以載入位於另一個域的 JSON 資料,回調的文法為:url?callback=?。jQuery 自動將 ? 替換為要調用的產生函數名。

你也可以給callback帶參數,如?callback=hello,那麼php(或者其他語言程式)首先要擷取$_GET[‘callback’],輸出地時候是:$_GET[‘callback’]+(json格式資料),然後在頁面上,有個function hello()方法處理返回的資料。(這裡只是大概描述下過程,一般情況不用加callback參數,直接帶個問號)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.