无法修改服务器,jsonp总是执行error方法

VicITman 发布于 2016/07/06 18:26
阅读 1K+
收藏 1

年度重磅!华为云2021应用构建技术实践精选集,七大领域跑通云上开发。>>>

调用扇贝网API,实现查词功能。利用jsonp解决跨域问题,却总是执行error中的方法。

<script type="text/javascript">
	$(function(){
		$("#trans").click(function(){
			$.ajax({
				type:"GET",
				url:"https://api.shanbay.com/bdc/search/?word="+"{"+ $("#word").val()+"}",
				dataType:"jsonp",
				jsonp:"?",
				//jsonpCallback:"successCallback",
				success: function(json){
					$("#result").html(data.cn_definition);
					
					/*if(msg){
						$("#result").html(data.cn_definition);
						}else{
						$("#result").html("出现错误:"+msg);
						}*/
					},
				error: function(jqXHR){
					alert("发生错误:"+jqXHR.status);
					}
				});	
		});		
	});
</script>






加载中
0
白衣人
白衣人
做一层代理。
V
VicITman
你好 请问怎么做
0
螃蟹大叔
螃蟹大叔
要扇贝网后台支持jsonp调用,不然扯淡
螃蟹大叔
螃蟹大叔
那也不行,后台必须要遵循jsonp协议的处理,不然是没办法跨域调用的
公孙二狗
公孙二狗
回复 @VicITman : json 不是 jsonp
V
VicITman
api上说返回的是json格式
0
zabcd117
zabcd117
该评论暂时无法显示,详情咨询 QQ 群:912889742
zabcd117
zabcd117
回复 @VicITman : 你现在的问题是没法跨域。人家没有jsonp接口,也没有设置允许跨域访问,无解的。
V
VicITman
URL: https://api.shanbay.com/bdc/search/?word={word} 他要求的格式是这样的。 现在显示的是{msg: "查询的词过长", status_code: 1, data: {}}
0
阳光test
阳光test
亲,你这个是用到了json,而不是jsonp,你可以抓一个包试试,返回的包中content-type是什么,如果不是JS文件的类型,那就说明你不是用的jsonp,自然也达不到跨域的目的。
V
VicITman
那如果用json 怎么实现跨域的?
V
VicITman
回复 @阳光test : 就是在$.ajax中做的,只不过是把从dataType:"json"改为dataType:"jsonp",但是后台好像也要支持才行
阳光test
阳光test
那肯定不对的,jsonp其实原理是将这个请求当成一个js,所以整个的content-type应该是js的content-type,我对jquery不是很熟悉,是不是jsonp的请求不是直接用$.ajax来做的,而应该是有一个类似$.jsonp这种的。
V
VicITman
content-type是 json
0
leo108
leo108

跨域这个问题,在浏览器前端是无解的,楼主别挣扎了

要么你找扇贝网给你开个jsonp接口,要么你自己搞个后端代理

0
c
cblweb

對方的 api 只有提供 json, 不支援 jsonp, 你是用不到的
你可以把 api 放到自己伺服器的後端去做, 例如你後端是用 php 的
可以這樣寫:
myapi.php
<?
$result = file_get_contents('https://api.shanbay.com/bdc/search/?word={'.$word.'}';
die($result);
?>

你的JS就可以直接call自己的api
$.getJSON("myapi.php",{word:$("#word").val()},function(data){
    //your callback here
});



OSCHINA
登录后可查看更多优质内容
返回顶部
顶部