ajax請求由get/post變成options由跨域引發

1:在作微信公衆平臺上的開發時,發現,原本在pc端好好的ajax請求,到了手機頁面上就無效了,用UC開發者手機瀏覽器鏈接pc測試,發現手機上的頁面後臺請求,ajax原本是get變成了options了,搞了很久,最後解決了。問題的緣由http://www.clanfei.com/2012/08/1637.html這個連接上文章解釋了引起跨域的緣由。html

2:我用jQuery的方式解決的,http://api.jquery.com/jQuery.getJSON/兩種解決思路,java

 

jQuery中如何經過JSONP來跨域獲取數據

(1) 第一種方法是在ajax函數中設置dataType爲'jsonp':jquery

 

 

  1. $.ajax({
  2.         dataType: 'jsonp',
  3.         url: 'http://www.a.com/user?id=123',
  4.         success: function(data){
  5.                 //處理data數據
  6.         }
  7. });

(2) 第二種方法是利用getJSON來實現,只要在地址中加上callback=?參數便可:ajax

 

 

  1. $.getJSON('http://www.a.com/user?id=123&callback=?', function(data){
  2.         //處理data數據
  3. });

我是經過第二種方式,數據庫

 

js中的代碼:json

var data= {id:2};//傳參數
//注意url必定要以callback=?的形式拼接,callback參數名能夠自定義,
                    var url = 'http://weixin.hehehe.com/filing/charge.json?callback=?';
                    $.getJSON(url,data,function(backdata){
                      alert(backdata)//後臺返回json格式的數據
                    });

java後臺的代碼api

@RequestMapping(value = "filing/charge", method = RequestMethod.GET)
    public void charge(Integer id, HttpServletRequest request, HttpServletResponse response) throws IOException {
        String callback = request.getParameter("callback");//jquery生成的自定義函數名
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/json;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.print(callback + "("+ JSON.toJSONString(list)+")");
        out.flush();
        out.close();
    }

這裏面的list是一個後臺數據庫查詢的list集合,把這個list集合轉換成json格式傳到前臺js中.跨域

到此就解決ajax跨域的問題了。瀏覽器

後續有不少開發填坑的文章發佈,若是對你有幫助,請支持和加關注一下微信

http://e22a.com/h.05ApkG?cv=AAKHZXVo&sm=339944

https://shop119727980.taobao.com/?spm=0.0.0.0 

相關文章
相關標籤/搜索