jsonp跨域写法

服务器端php

//文件名是jsonp.php
$callback = $_GET['cb'];//名字需要与js端对应,$.ajax方式时js端默认名字是callback

$arr = array(
    'A'=> 'wom',
    'B'=> 'baoma',
    'C'=> 'mimi'
    );

echo $callback . '(' . json_encode($arr) . ')';

js端
1.原生,生成一个script标签,将cb为php端获取的参数名,defbc为js执行的函数名(实质是远程调用js函数,实参为php端数据)

var script = document.createElement("script");
script.src = "jsonp.php?cb=defbc";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(script, s);
function defbc(result){
  console.log(result);//{A: "wom", B: "baoma", C: "mimi"},注意这里取到的是字符串,需要JSON.parse(result) 或 eval('(' + result + ')');转化为对象来处理
}

2.$.ajax

$.ajax({
    type: 'get',
    url: 'jsonp.php',
    dataType: "jsonp",/*加上datatype*/
    jsonp: "cb",    //跨域请求的参数名,默认是callback
    //jsonpCallback:"callback",//自定义跨域参数值,回调函数名也是一样,默认为jQuery自动生成的字符串
    success: function(obj) {
        console.log(obj);//{A: "wom", B: "baoma", C: "mimi"}
    }
})

3.$.getJSON

$.getJSON('jsonp.php?cb=?', {}, function(obj) {
    console.log(obj);
});

你可能感兴趣的:(jsonp跨域写法)