Ajax跨域查詢完美解決通過(guò)$.getJSON()實(shí)現(xiàn)

字號(hào):


    原因:瀏覽器安全上做了限制,禁止ajax跨域獲得數(shù)據(jù)。
    解決方法:通過(guò)jquery提供的$.getJSON()可以跨域獲得JSON格式的數(shù)據(jù)。優(yōu)點(diǎn):兼容性強(qiáng)。
    Java后臺(tái)代碼:
    代碼如下:
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    String callback =req.getParameter("callback");//jquery生成的自定義函數(shù)名
    resp.setCharacterEncoding("UTF-8");
    resp.setContentType("text/html;charset=utf-8");
    PrintWriter out = resp.getWriter();
    //返回json格式字符串,注意向前臺(tái)輸出的格式必須為 callback(json格式的字符串);
    //callback是jquery生成的自定義函數(shù)名,返回這種格式,前臺(tái)jquery代碼會(huì)自動(dòng)替換
    //回調(diào)函數(shù)為此callback函數(shù),從而達(dá)到跨域的效果,網(wǎng)上還有其他的跨域方案如:AJAJ
    //原理應(yīng)該也是和此方法一樣。缺點(diǎn)是:返回?cái)?shù)據(jù)量不宜過(guò)大,安全性差,建議重要數(shù)據(jù)不
    //要通過(guò)這種形式傳遞。
    out.print(callback+"({name:'111',sex:'222'});");
    out.flush();
    out.close();
    }
    Js前臺(tái)調(diào)用代碼:
    代碼如下:
    $(function(){
    //需要傳的參數(shù),可以不傳。
    var data= {param1:"param1",param2:"param2"};
    //注意url一定要以callback=?的形式拼接,callback參數(shù)名可以自定義,
    //但后臺(tái)必須也要同步獲取的參數(shù)名
    var url = 'http://192.168.1.216:8080/DSFA/getUser?callback=?';
    $.getJSON(url,data,function(backdata){
    //其實(shí)后臺(tái)返回的函數(shù)已經(jīng)替換為此函數(shù),所以backdata
    //就是你從后臺(tái)傳過(guò)來(lái)的json對(duì)象。
    alert(backdata);
    });
    })
    如果有不明白的地方,請(qǐng)留言....