前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用YQL解决跨域请求json转jsonp问题

使用YQL解决跨域请求json转jsonp问题

作者头像
全栈若城
发布于 2024-02-29 10:16:29
发布于 2024-02-29 10:16:29
13600
代码可运行
举报
文章被收录于专栏:若城技术专栏若城技术专栏
运行总次数:0
代码可运行

一、跨域报错

首先,是跨域请求的问题,jQuery默认不支持跨域请求,报错如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
index.html:1 XMLHttpRequest cannot load http://www.weather.com.cn/data/sk/101280601.html. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access

这个问题很快的到了解决:  1.通过给ajax添加crossDomain:true属性指定跨域  2.将数据格式(dataType)指定为jsonp ,其实指定了这个默认就会开启跨域了,不用进行1操作

二、返回格式报错

这个问题的主要原因在于jQuery ajax要求请求数据类型和返回数据类型是一致的。

因为网站返回的数据类型是json,这跟我们指定的数据交互格式jsonp不一致,在调用时可以看到网络已经返回数据,但是$.ajax并不能以jsonp格式解析数据,在控制台报了如下错误:

这个问题就有点难度了,请求格式不是jsonp,直接不让发送数据,而返回数据又固定为json,真是巨坑啊。

折腾了半天,最后解决方案如下:  使用雅虎提供的YQL代理将数据转换,并且支持网上绝大多数的数据格式,我们只需要按照它指定的格式提交地址即可。  具体代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//目标请求url
var target="http://www.weather.com.cn/data/sk/101280601.html";
//ajax请求
    $.ajax({    
            //雅虎代理url
            url: 'http://query.yahooapis.com/v1/public/yql',    
            //指定数据格式
            dataType: 'jsonp',  
            //雅虎代理要求的数据格式
            data: {    
                q: "select * from json where url=\'" + target+ "'",    
                //代理返回格式
                format: "json"    
            },    
            success: function (data) {  
                //在控制台输出,页面按F12查看,  
                console.log(data);
            }    
        });
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
jquery利用雅虎YQL 做中间层进行跨域请求
全栈若城
2024/02/29
980
AJAX跨域请求JSONP 原
JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。
tianyawhl
2019/04/04
9430
jsonp获取json数据
这两天做微信端JS接口,当时遇到的第一个问题就是权限验证的参数请求,当你请求access_token等的时候,就会存在跨域问题:然后在网上查了,采用ajax的jsonp进行跨域请求,后来报错了,返回的结果错误。然后认真看了一下文档,发现ajax的jsonp返回的数据是callback(json),卡到这里。最后同时为了安全的考虑,我就将这一部分的权限验证参数在后端做,然后前端请求,这样就避免了跨域,同时将安全考虑进去了。
Rattenking
2021/01/29
2.5K0
JSONP原理以及示例(jsonp示例)
首先我们需要明白,在页面上直接发起一个跨域的ajax请求是不可以的,但是,在页面上引入不同域上的js脚本却是可以的,就像你可以在自己的页面上使用<img src=””> 标签来随意显示某个域上的图片一样。比如我在8080端口的页面上请求一个9090端口的图片:
超级小可爱
2024/02/20
3890
JSONP原理以及示例(jsonp示例)
js ajax 跨域问题 解决方案[通俗易懂]
跨域问题来源于JavaScript的”同源策略”,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的,html本身没有跨域问题。
全栈程序员站长
2022/09/25
1.8K0
js ajax 跨域问题 解决方案[通俗易懂]
jquery jsonp 解决ajax无法跨域请求的问题
ajax只能请求同一个域下的数据或资源,有时候需要跨域请求数据,就需要用到jsonp技术,jsonp可以跨域请求数据,它的原理主要是利用了<script>标签可以跨域链接资源的特性。jsonp和ajax原理完全不一样,不过jquery将它们封装成同一个函数。
Devops海洋的渔夫
2019/05/30
4.7K2
ajax跨域请求结合springmvc后台代码学习整理
ajax跨域请求,在工作中遇到使用ajax发起请求获取数据,但是请求的数据不在同一个域下,这样子就要使用到ajax的跨域请求了! 我使用的框架 SpringMVC,我在PC端的项目里面写一个接口方法,但是在wap项目中也要用改接口!下面贴出示例代码: (1):前台请求代码 ①:正常请求(不跨越)
全栈程序员站长
2022/07/19
3800
ajax跨域请求jsonp完整示例
最经用到jsonp(ajax)的跨域请求,在这分享给大家,有需要用到的一看就能明白。具体步骤如下:
全栈程序员站长
2022/07/05
6820
ajax跨域请求jsonp完整示例
jQuery Ajax 实现跨域请求JSONP
相信好多朋友在使用jQuery进行Ajax请求接口的时候会出现 No 'Access-Control-Allow-Origin' header is present on the requested resource 然后请求失败,下面我们来简单的解决这个问题。 直接上代码 <script type="text/javascript" src="/jquery-1.4.2.min.js"></script> <script type="text/javascript"> $(function(){
骤雨重山
2022/01/17
8870
json & jsonp
对于JSON和JSONP,应该都不陌生,咳咳,不过最初对JSONP有点误解,以为是JSON的另外一个别名,其实二者风马牛不相及。
仇诺伊
2018/09/12
1.3K0
json & jsonp
ajax跨域问题以及解决方案_js跨域请求的三种方法
鼠标离开用户名输入框时,检查是否符合要求,如果为空,则给提示,如果不为空,则异步查询数据库,后返回结果;
全栈程序员站长
2022/09/23
3.5K0
ajax跨域问题以及解决方案_js跨域请求的三种方法
JQuery Ajax跨域的问题
今天前端因为需要ajax调用两个不同的项目,请求域不一样,所以涉及ajax跨域的问题 ,其实很简单,具体如下
执笔记忆的空白
2020/12/25
8150
跨域请求的常用方式及解释
同源策略 首先基于安全的原因,浏览器是存在同源策略这个机制的,同源策略阻止从一个域加载的脚本去获取另一个域上的文档属性。也就是说,受到请求的 URL 的域必须与当前 Web 页面的域相同。这意味着浏览器隔离来自不同源的内容,以防止它们之间的操作。 js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据。 只要协议、域名、端口有任何一个不同,都被当作是不同的域。 下面介绍几种常用的跨域请求方式 默认端口为:8080
柴小智
2018/04/10
1.5K0
跨域请求的常用方式及解释
跨域请求数据解决方案整理
跨域请求数据解决方案主要有如下解决方法: JSONP方式 表单POST方式 服务器代理 Html5的XDomainRequest Flash request 分开说明: 一、JSONP: 直观的理解: 就是在客户端动态注册一个函数 function a(data),然后将函数名传到服务器,服务器返回一个a({/*json*/})到客户端运行,这样就调用客户端的 function a(data),从而实现了跨域. 诞生背景: 1、Ajax直接请求普通文件存在跨域无权访问的问题,甭管是静态页面、动态网页、web
小端
2018/04/16
1.3K0
说说JSON和JSONP,也许你会豁然开朗-转
今天在写底层通信框架的时候,遇到了跨域的问题;随便给不知道的童鞋们分享下基础知识。 前言   由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现。   当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socket通讯和本地数据库功能,又或者通过HTML5的WebSocket也可以实现与服务器的通讯和服务端推功能,但这两种方式都有其局限性,前者需要PhoneGap支持,后者要求用户设备必须支持WebSocket,因此都
李海彬
2018/03/19
1.6K0
说说JSON和JSONP,也许你会豁然开朗-转
第113天:Ajax跨域请求解决方法
第五步:在监听函数中,判断readyState=4&&status=200表示请求成功
半指温柔乐
2018/09/11
1.5K0
搞定所有的跨域请求问题 : jsonp &amp;amp; CORS
网上各种跨域教程,各种实践,各种问答,除了简单的 jsonp 以外,很多说 CORS 的都是行不通的,老是缺那么一两个关键的配置。本文只想解决问题,所有的代码经过亲自实践。
用户1257393
2018/12/07
7890
跨域请求的解决方案
在请求或提供api的时候,我们经常会遇到跨域问题,这是由于安全问题,但是有时候我们必须去允许跨域请求,不然我们将拿不到后端传过来的数据 所以,笔者在这里总结了一下相关解决方案
earthchen
2020/09/24
6670
JSON与JSONP的区别
说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服务器端代理来解决。
前端_AWhile
2019/08/29
1.8K0
ajax实现跨域_js跨域请求的三种方法
跨域大家都知道,不同地址,不同端口,不同级别,不同协议都会构成跨域。例如:about.haorooms.com和www.haorooms.com都会构成跨域。总结起来只要协议、域名、端口有任何一个不同,都被当作是不同的域。下面举例,每两个一组。
全栈程序员站长
2022/09/23
3K0
相关推荐
jquery利用雅虎YQL 做中间层进行跨域请求
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验