jquery ajax 跨域

本文深入解析了跨域与非跨域数据获取的方法,包括客户端和服务端的具体实现步骤,以及如何在跨域场景下通过动态加载数据并使用回调函数处理数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

具体方法:

非跨域的方式:
客户端

$.getJSON('test.php',null,function (json){
        alert(json.a);
});

服务端

require('JSON.php');
$json = new Services_JSON();
$info = array('a'=>1);

echo .$json->encode($info);
//实际输出 {"a":1}


跨域的方式:
客户端

$.getJSON('http://slow-live.com/test.php?jsoncallback=?',function (json){//区别在于增加jsoncallback传递回访函数?代表由jquery来指定
        alert(json.a);

});

$.ajax({
			type : "get",
			async:false,
			url : "http://www.xxx.com/index.php?listid=9",
			dataType : "jsonp",
			jsonp: "jsoncallback",//服务端用于接收callback调用的function名的参数 相当于 jsoncallback = ? 
			//jsonpCallback:"success_jsonpCallback",//callback的function名称
			beforeSend : function(){
				$('<p id=loading_img><img src="loading.gif" width=20 height=20 /></p>').appendTo("#result_yue");
			},
			success : function(data){
				response(data,"#result_yue")
			},
			error:function(){
				$("#result_yue").html('出错了');
			}
		});

//成功返回处理函数
	function response(json,dom_id){
		$("p").remove("#loading_img");
		$.each(json, function(i,item){
				$("<p>",{
					id : "title_"+json[i].id,
					text : function(){
							$("<a href='#news_page' data-transition='slide'>"+json[i].title+"</a>").appendTo(this);
  					},
					click : function(){
							$("#news_title").html(json[i].title);
    						$("#news_content").html(json[i].content);
  					}
	
				}).appendTo(dom_id);
				
  			});

	}



服务端:

require('JSON.php');
$json = new Services_JSON();
$info = array('a'=>1);

echo $_REQUEST['jsoncallback'].'('.$json->encode($info).')';
//服务端的区别不是直接输出数据,把回访函数加上
//实际输出 jsonp1237114865030({"a":1})

实际上跨域是通过动态增加script来加载数据,无法直接获得数据,所以需要使用回调函数。
### 解决方案概述 当使用 jQuery 发起 AJAX 请求时,如果目标 URL 属于不同源,则会触发浏览器的安全机制,阻止请求完成。为了克服这一限制,可以采用 JSONP 或 `$.getScript` 方法来处理请求[^1]。 ### 使用 JSONP 进行请求 JSONP 是一种通过 `<script>` 标签加载 JavaScript 文件的方式,它允许开发者绕过同源策略限制。在 jQuery 中可以通过设置 `dataType` 参数为 `"jsonp"` 来启用此功能: ```javascript $.ajax({ url: "https://api.example.com/data", dataType: 'jsonp', success: function(response){ console.log('Data received:', response); }, error: function(xhr, status, error){ console.error('Error occurred:', xhr.responseText || error); } }); ``` 这种方法仅适用于 GET 请求,并且服务端需支持返回带有回调函数包裹的数据结构。 ### 利用 $.getScript 执行脚本形式的请求 另一种替代方案是利用 `$.getScript()` 函数直接加载并执行远程服务器上的 JS 文件。这种方式同样依赖于被访问的服务提供有效的响应内容: ```javascript $.getScript("https://example.com/path/to/script.js", function(data, textStatus, jqxhr) { console.log('Script loaded and executed.'); // 可在此处操作由 script.js 提供的功能或变量 }); ``` 需要注意的是,上述两种方法都要求对方服务器配合配置相应的接口以适应客户端的需求[^2]。 ### CORS 配置作为更通用的选择 除了以上提到的技术外,在现代 Web 开发环境中更为推荐的做法是由后端开启 CORS (Cross-Origin Resource Sharing),这是一种 HTTP 头部字段定义了哪些来源能够获得特定资源访问权限的标准协议。一旦启用了 CORS 支持,就可以像平常一样发起普通的 XMLHttpRequests 而不必担心问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值