【问题标题】:Cross domain HTML parsing using AngularJS [duplicate]使用AngularJS进行跨域HTML解析[重复]
【发布时间】:2017-07-31 11:47:06
【问题描述】:

我们正在开发 Java 项目,其中后端是 java + spring,前端是 angular 2 + HTML。

我想做跨域 html 解析,但是我们没有权限访问服务器端的外部链接,因为我们有一些外部域的安全问题,所以我们必须获取 DOM 内容在客户端使用 jquery 的链接。

我试过这些:

var url = "http://xyz.aspx";

$http({
    method: 'JSONP',
    url: url,
    params: {
        format: 'jsonp',
        json_callback: 'JSON_CALLBACK'
    }
}).
success(function(response) {
    $scope.test = response;
}).
error(function(status) {
    //your code when fails
});

我需要解析的外部链接包含许多href 链接。我还需要解析这些链接的内容。

上面的代码都试过了:

在控制台中出现错误 - Uncaught SyntaxError: Unexpected token

获取页面内容并传递到服务器端进行解析的最佳解决方案是什么?

【问题讨论】:

  • 请提供一些反馈,我的回答对你有用吗?

标签: javascript angularjs http angular angular-ui-bootstrap


【解决方案1】:

解决方案 1)

在控制台中出现错误 - Uncaught SyntaxError: Unexpected token

这意味着服务器回调不是有效的 JavaScript 应用程序。请确保您的服务器返回有效的 JavaScript 应用程序。这样,这个错误就会消失。 JSONP 需要有效的 JavaScript 应用程序响应才能使其工作。例如,JSONP 回调应该是这样的:

jsonCallback(
    {
        sites: [
            {
                siteName: "Test"
            }
        ]
    }
);

解决方案 2)

如果您的服务器端未返回 JSON 对象,请尝试使用 GET 请求并启用 CORS

$http({
    method: 'GET',
    url: "http://xyz.aspx",
}).success(function(response) {
    $scope.test = response.data;
}).error(function(status) {
    //your code when fails
});

解决方案 3)

如果您仍然无法将 CORS 添加到后端,您可以自己创建一个 PROXY 应用程序。例如,这是一个公共 CORS 代理 https://crossorigin.me/。添加一个关于如何创建代理服务的示例将很多。请自行研究。网上有很多例子。

【讨论】:

  • 我无法更改服务器内容,即 http 链接,我只需要该服务器链接中的内容。
  • @Geetanjali 已更新,如果不启用 CORS,则无法使其工作。
  • “JSONP 需要一个有效的 JSON 正文响应”——它不需要。它需要一个 JavaScript 应用程序,而不是 JSON。
  • @Quentin,是的。但是$http 方法JSONP 也可以使用 JSON 对象作为响应负载。
  • @lin — 不应该。如果在响应中给它 JSON,它通常会在遇到第一个 : 时抛出错误。 JSONP 通过生成<script src="path/to/jsonp"></script> 工作。您必须将 JS 输入其中,而不是 JSON。 stackoverflow.com/questions/19165925/…
【解决方案2】:

ng.$http。您的网址缺少回调参数,而不是像

 json_callback: 'JSON_CALLBACK'

试试下面的方法

$http({
    method: 'jsonp',
    url: 'http://xyz.aspx?callback=JSON_CALLBACK',
    params: { name: 'xyz' }
}).success(function(data, status , header, config) {
    console.log('success');
}).error(function(data, status , header, config) {
    console.log('error');
});

【讨论】:

  • 我也试过这些,但我得到了同样的错误。
猜你喜欢
  • 2011-06-05
  • 2013-01-31
  • 2017-01-29
  • 1970-01-01
  • 2013-05-01
  • 2013-04-26
  • 2012-04-06
  • 2016-01-16
  • 2012-09-03
相关资源
最近更新 更多