【转】$.getJSON与PHP跨域请求问题解决

     今天写了个数据接口供前端同事使用,本来很简单的事,没想到遇到一些问题,在此记录一下。

    后端:php提供json数据接口;前端:利用$.getJSON获取数据处理。

    错误如下:

        在火狐浏览器中:SyntaxError: missing ; before statement

 

    经搜索解决方案得到如下信息:

$b = json_encode($data);
header("Access-Control-Allow-Origin:http:xxx.cn");//(1)
echo "{$_GET['jsoncallback']}({$b})";//(2)
exit;

    如果在PHP中少了(1)行的代码,则会出现

        XMLHttpRequest cannot load  ''. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' ' is therefore not allowed access.

    如果少了第(2)行代码

        在谷歌浏览器中:Uncaught SyntaxError: Unexpected token :

        在火狐浏览器中:SyntaxError: missing ; before statement

 

参考文章:http://blog.163.com/lvshutao@126/blog/static/164637467201442253942499/

<think>我们正在讨论jQuery中的$.getJSON()函数。根据用户需求,需要解释其作用并提供使用示例。 引用内容提供了几个使用示例和关键点: 1. $.getJSON()用于获取JSON数据(引用[1]) 2. 基本用法:$.getJSON(url, data, callback) (引用[2]和[4]) 3. 可以用于请求,通过JSONP方式(引用[3]) 因此,回答将围绕这些点展开。 注意:用户要求使用中文回答,并且按照给定的格式要求(如数学公式的格式等)。由于当前主题不涉及数学公式,所以主要关注代码和文字描述。 回答结构: 1. 解释$.getJSON()的作用 2. 说明其基本语法 3. 提供使用示例(包括普通使用使用) 4. 注意事项(如的实现原理JSONP) 5. 生成相关问题 注意引用标识:在回答中引用站内内容的地方添加[^n]。</think>### jQuery $.getJSON() 函数详解 #### 作用 `$.getJSON()` 是 jQuery 提供的 AJAX 方法,专门用于**从服务器获取 JSON 格式的数据**。主要功能包括: 1. 向指定 URL 发送 HTTP GET 请求 2. 自动解析返回的 JSON 数据为 JavaScript 对象 3. 支持请求(通过 JSONP 实现) 4. 简化异步数据获取流程[^1][^3] #### 基本语法 ```javascript $.getJSON(url, [data], [callback]); ``` - `url`:请求地址(必需) - `data`:发送到服务器的键值对(可选) - `callback`:请求成功后的回调函数(可选) --- #### 使用示例 ##### 1. 基础用法(获取并处理 JSON 数据) ```javascript $.getJSON("data.php", function(response) { console.log("获取数据:", response); // 示例:显示用户信息 $("#result").html(`用户名:${response.name}<br>邮箱:${response.email}`); }); ``` *说明*:向 `data.php` 发送请求,将返回的 JSON 对象传递给回调函数[^1][^4] ##### 2. 传递参数 ```javascript // 发送用户ID和搜索关键词 $.getJSON("search.php", { userid: 23, keyword: "jQuery" }, function(data) { console.log("搜索结果:", data.items); }); ``` *说明*:第二个参数以对象形式传递查询字符串,自动换为 `?userid=23&keyword=jQuery`[^4] ##### 3. 请求JSONP) ```javascript // 获取数据(需服务器支持JSONP) $.getJSON("http://api.example.com/data?callback=?", function(response) { alert("数据:" + response.url); }); ``` *关键点*: - `callback=?` 会被 jQuery 自动替换为随机回调函数名 - 服务器需返回如:`jsonp123(...)` 格式的数据 - 实际发送的请求:`http://api.example.com/data?callback=jsonp123`[^2][^3] --- #### 注意事项 1. **错误处理**:添加 `.fail()` 链式调用 ```javascript $.getJSON("data.php") .done(function() { /* 成功 */ }) .fail(function() { alert("请求失败"); }); ``` 2. **缓存问题**:在 URL 后添加间戳避免缓存 ```javascript $.getJSON(`data.php?_=${new Date().getTime()}`) ``` 3. **安全限制**:普通 AJAX 受同源策略限制,JSONP 是唯一解决方案[^3] --- ### 相关问题 1. 如何处理 `$.getJSON()` 请求失败的情况? 2. `$.getJSON()` 和 `$.ajax()` 有哪些核心区别? 3. 如何让 PHP 后端正确返回 JSONP 格式的数据? 4. 为什么 JSONP 可以绕过浏览器的同源策略限制? [^1]: 获取 JSON 数据的基本用法 [^2]: 带参数请求的语法结构 [^3]: JSONP 实现原理 [^4]: 参数传递的实际应用场景
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值