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

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

作者头像
全栈若城
发布2024-02-29 18:16:29
880
发布2024-02-29 18:16:29
举报
文章被收录于专栏:若城技术专栏若城技术专栏

一、跨域报错

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

代码语言:javascript
复制
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
复制
//目标请求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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、跨域报错
  • 二、返回格式报错
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档