补充:
我模拟登录抓取图书馆的信息,他的那个"续借",是Ajax提交的,我现在是想在在我的代码里请求,在我这边也可以实现“借阅”,图书馆的后台,我肯定不能修改,主要是在我这边怎么实现。
之前的报错是这样的
原网站的代码:
我用JQuery处理的
代码如下:
<script>
function getInLib(barcode,num)
{
$('#' + num).hide();
$.ajax({
type: "GET",
url: 'http://******/reader/ajax_renew.php?bar_code=' + barcode + '&time=' + new Date().getTime(),
dataType: 'jsonp',//跨域请求,加入这个选项即可
jsonpCallback: "jsonpcallback",
success: function (response) {
console.log(response);
},
error : function(response) {
alert(response);
}
});
}
</script>
点击按钮,浏览器运行结果:
点击错误链接:
这样的话,应该是请求到数据了,之后怎么去掉这个报错,然后取出数据?
如果真的是跨域问题,你找后端提供接口的同学修改一下请求头就好了。
Access-Control-Allow-Origin
设置这个属性,让后端允许你这个地方的请求源的请求即可。
其他方法有,比如通过代理。可以以后详细了解。
我瞄了一眼你的问题,不太像是跨域照成的 - -!更像是语法错误,请求的那个页面里面有写错的内容
题主的问题,就是jsonp获取到的数据,无法调用回调函数,也就不能处理!为什么呢,因为对方服务器返回的数据格式并不能让你调用你的回调函数,所以自然报错了。
刚写了一篇博文,说的很清楚:http://whj.site/post/qian-duan/kua-yu-de...
补充一下:
所谓这些跨域方法,本质还是需要对方服务器支持,不然无法跨域成功。
后端没有跨域问题,所以前端无法跨域获取的数据可以通过后端取到,然后给前端。
第一,jsonp只能是GET方法,你怎么写了个POST。
第二,jsonp必须遵循一个统一的格式,即jsonpcallback(/json data/);
可是,你这两种都不符合。。。
自己回答:
当时脑子犯抽了,这个问题,他原网站的ajax构造了一个地址,其实我可以在自己的代码里curl 请求ajax生成的这个地址,然后抓取返回的信息。不是前端能解决的,要后端实现。
谢谢各位大神的帮助,让我学习了很多的跨域知识。
1、Jsonp 只有GET 方式 而且后端必须有相应的格式。
2、跨域请求 只有GET方式,POST不能实现。
先了解一下 Jsonp 的具体运作方式,可以自己用搜索引擎搜索一下,或者直接参见这个回答。
Jsonp 要求后端配合你进行回掉函数的调用,请求的响应应该是
jsonpCallback(/*data here*/);
这种形式,而你的响应内容直接是 html 标签,显然是不可能成功的。