AJAX跨域问题解决jquery异步请求跨域问题解决方式
解决方案:
一、jsonp方式(支持GET不支持POST):
var formData = new FormData(); // 实例化创建form表单
formData.append("title", '越加网'); // 参数一
formData.append("title", 'https://www,yj521.com'); // 参数二
$.ajax({
url: "http://yj521.com/ajax/jsonp.php",
dataType: "jsonp",
jsonp: "callback",
data: formData,
context: document.body,
success: function(data) {
console.log(data);
}
});
请求的服务端代码如下(以PHP语言为例):
$params = isset($_REQUEST) ? $_REQUEST : array(); // 接口接收的参数
$result = array('code'=>'Success',data=>$params); //接口要返回的数据
$data = json_encode($result); // 进行转json字符串
$callback = $_GET["callback"]; // 获取callback参数
echo $callback . "(" . $data . ")"; // 拼装输出
这个调用实际上的实现原理是在网页中构造一个script标签,将src设置为对应的url,并增加上相应的callback参数,形如如下格式:<script src="https://yj521.com/test/ajax/index.php?callback=jQuery211018970995225637144_1465350372062&_=1465350372063"></script>
服务端返回的内容就是一段js代码类似:18970995225637144_1465350372062({"id":"1","name":"tom"})。
取到该段js代码后就会执行这个函数,从而实现回调ajax请求时设置的success方法。
二、服务端设置支持跨域(支持GET和POST请求):
js代码:
var formData = new FormData(); // 实例化创建form表单
formData.append("title", '越加网'); // 参数一
formData.append("title", 'https://www,yj521.com'); // 参数二
$.ajax({
type: "POST",
url: "http://yj521.com/test/ajaxkuayu/test.php",
dataType: "json",
data: formData,
success: function(data) {
console.log(data);
}
});
服务端代码(以PHP语言为例):
header('Access-Control-Allow-Origin:*'); // 表示支持所有来源的域进行请求,实际在操作过程中可以设置为指定域
$params = isset($_REQUEST) ? $_REQUEST : array(); // 接口接收的参数
$result = array('code'=>'Success',data=>$params); // 接口要返回的数据
echo json_encode($result); // 进行转json字符串并输出
exit;