跨域获取html时报错:Uncaught SyntaxError: Unexpected token <

Viewed 18606

需求如下:

通过前端抓取自己segmentfault主页的前几篇文章

请求部分的代码如下:

$.ajax({
        url: sfUrl,
        dataType: 'jsonp',
        success: function(data) {
            parseArticle(data);
        },
        error: function(err) {
            console.log(err)
        }
    })

运行结果如下:

Uncaught SyntaxError: Unexpected token <

见下图(第二行打出的是err信息)
clipboard.png

SourcesNetwork的信息来看数据http事务是完成了

clipboard.png

数据也返回了

clipboard.png
个人认为是解析出现了问题,但是仍然不知道怎么解决。

问题如下

  • 为什么会报错
  • 怎样解决这个问题
1 Answers

问题解决了。

1.为什么会报错

JSONP返回的数据是应该是形如:

callback_function(html); //在上例中callback_function()就是success

然而由于返回的数据是html,所以在执行、callback_function(html)的时候,由于html的格式形如

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    
</body>
</html>

这个样所作为一个参数执行就会报错,就是上面出现的:Uncaught SyntaxError: Unexpected token <

2.怎么解决

由于后台传回的就是html,这是我们不可改变的,而且向直接将html结构作为参数是总会出问题的 ,所以只能换一种跨域方式了。


2017年10月22日 22:10:34更
现有的跨域方式还没有能够帮我实现这一需求的,看来还是我太天真了。

后端抓取