想当年也是被跨域搞大了头~~~
服务端代码为php,其它的语言应该也有类似的吧,或者差不多的意思。
情况一:
设置Access-Control-Allow-Origin ,这玩意儿意思就是你允许谁请求你的东西;下面这个设置为“所有的”,请求的方法为“get,post”。
(注意安全,一般可能作为测试用)
/*星号表示所有的域都可以接受,*/ header("Access-Control-Allow-Origin:*"); header("Access-Control-Allow-Methods:GET,POST"); echo "这是我随便写的数据";
情况二:
jsonp,其实看了那些相关文章之后,发现jsonp这个东西其实跟使用script标签,和$.getScript方法是一个道理。那么我就分小点列一下。
PHP:这个代码都一样不用改
$callback = isset($_GET['jsoncallback']) ? trim($_GET['jsoncallback']) : ''; //jsonp回调参数,必需 $date = array( "msg"=>"这是我随便写的数据" ); $tmp= json_encode($date); //json 数据 echo $callback . "(".$tmp.")";
①jsonp
JS:
$.ajax({ url:"*******/ajax.php", type:"post", dataType:"jsonp", jsonp: 'jsoncallback', success:function(data){ console.log(data); } });
②getScript
JS
function jsoncallback(data){ console.log(data); } $.getScript("*******/ajax.php?jsoncallback=jsoncallback");
③script标签,同上,只是改为动态写个标签附上这个路径到src上。
这种情况的实现方法呢是通过get方式(也只能用这个方式)请求的同时附带callback方法(以上为jsoncallback),那么后台拿到这个参数之后直接返回只是返回的时候是这个东西
jsoncallback(data);
what!!!这不是一个JS的方法调用吗?噢噢噢噢这样,所以我之前定义的那个方法就可以拿到这个data参数了。然后进行数据处理吧~~~