跨域HTML解析使用AngularJS

Cross domain HTML parsing using AngularJS

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

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

我试过这些:

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
});

我需要解析的外部link包含很多href link。我还需要解析那些 links.

的内容

已尝试上述代码:

getting error in console - Uncaught SyntaxError: Unexpected token < on xyz.aspx page

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

解决方案 1)

getting error in console - Uncaught SyntaxError: Unexpected token < on xyz.aspx page

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

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

解决方案 2)

如果您的服务器端没有 return 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 应用程序。例如,这是一个 public CORS 代理 https://crossorigin.me/。添加一个关于如何创建代理服务的示例就足够了。请自行研究。网上有很多例子。

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

 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');
});