$.getJSON跨域问题

本文介绍了一种通过JSONP实现跨域数据请求的方法,并提供了一个简单的示例,展示了如何在不同域名下的PHP和HTML文件间进行数据交互。

分站的过程中,需要跨域请求数据,出现小的问题,记录一下,

test.php,在www.a.com根目录中

test.php代码:

<?php
	$dal=$_GET['callback'];
	$arr=array("name"=>"4nail", "age"=>20);
	$jarr=json_encode($arr);
	echo $dal.'('.$jarr,')';
?>

 test.html在www.b.com根目录下

test.html代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script language="javascript" type="text/javascript" src="Scripts/jquery.min.js"></script>
<script type="text/javascript">
	$(function(){
		$("#test").click(function(){
			$.getJSON("http://www.a.com/test.php?callback=?",function(data){
				alert(data.name);							
			});					  
		});
	});
</script>
</head>

<body>
<div style="width:100px;height:100px;background-color:#F00" id="test">点击跨域加载</div>
</body>
</html>

 

在,$.getJSON()中,url参数,后面要加个,callback=?,至于callback,可以自定义其他的名称,在test.php文件中,改相应的名称,就ok啦!在输出的json 数据时,必须要加上$_GET['callback']和两个括号:echo $dal.'('.$jarr,')';z至于为什么要加,网上很多文章,我这里不再陈述!

 

<think>我们正在讨论jQuery$.getJSON方法。用户要求一个使用教程和示例。根据要求,我们需要:1.使用中文回答2.结构清晰,逐步解决问题3.保证回答真实可靠4.生成相关问题(在最后)5.注意:数学表达式按规则使用$...$$$...$$,但在这个问题中可能涉及较少,如果有数据格式等可能需要。由于是JavaScriptjQuery相关,我们不需要数学公式,但如果有数字或代码内表达式,按规则处理。回答结构:1.介绍$.getJSON方法2.语法说明3.参数解释4.示例代码(多个示例,包括基本使用、处理错误等)5.注意事项6.生成相关问题注意:引用标识,如果引用了外部资源需要标注,但这里主要是通用知识,如果引用特定文档可以标注,不过jQuery官方文档是通用参考。由于用户要求的是教程和示例,我们将重点放在示例上。开始回答:</think>### jQuery `$.getJSON()` 方法使用教程 `$.getJSON()` 是 jQuery 提供的异步加载 JSON 数据的快捷方法,底层基于 `$.ajax()`。它自动将响应解析为 JavaScript 对象,语法如下: ```javascript $.getJSON(url [, data] [, success]) ``` - **url**(必填):请求的 JSON 数据地址(支持同或 CORS ) - **data**(可选):发送到服务器的键值对,格式为 `{key1:value1, key2:value2}` - **success**(可选):请求成功时的回调函数,格式为 `function(data, status, xhr)` #### 基础示例 ```javascript // 获取公开的测试API数据 $.getJSON("https://jsonplaceholder.typicode.com/todos/1", function(data) { console.log("标题:" + data.title); // 输出:delectus aut autem $("#result").html(data.completed ? "已完成" : "未完成"); } ); ``` #### 带参数请求 ```javascript // 向服务器发送查询参数 $.getJSON("/api/users", { id: 102, lang: "zh" }, // 相当于请求 /api/users?id=102&lang=zh function(users) { users.forEach(user => { $("ul").append(`<li>${user.name}</li>`); }); } ); ``` #### 错误处理 ```javascript $.getJSON("data.json") .done(data => console.log("成功:", data)) .fail((jqXHR, status, err) => { console.error(`失败: ${status} - ${err}`); }) .always(() => console.log("请求完成")); ``` ### 关键注意事项 1. **限制**: 默认禁止请求,若需需服务器设置 CORS 头部(如 `Access-Control-Allow-Origin: *`)[^1] 2. **缓存问题**: 浏览器可能缓存 GET 请求,可通过添加时间戳避免: ```javascript $.getJSON("data.json?t=" + new Date().getTime(), ...) ``` 3. **安全建议**: 始终验证服务器返回的数据,避免直接插入 DOM: ```javascript // 错误示例(XSS风险) $("#content").html(data.userInput); // 正确做法 $("#content").text(data.safeContent); ``` ### 完整示例 ```html <!DOCTYPE html> <html> <head> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <button id="loadBtn">加载数据</button> <div id="output"></div> <script> $("#loadBtn").click(() => { $.getJSON("https://api.github.com/users/jquery/repos", { per_page: 3 }, repos => { let html = repos.map(r => `<p>${r.name}: ★${r.stargazers_count}</p>`); $("#output").html(html.join("")); } ).fail(() => alert("请求失败")); }); </script> </body> </html> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值