Angularjs中$http.post返回的网页怎么获取某个元素的内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Angularjs中$http.post返回的网页怎么获取某个元素的内容相关的知识,希望对你有一定的参考价值。

$http.post获得的返回不是个json么?取callback的success方法返回值就可以啊。

$http(
method : 'POST',
url : 地址,
data: 数据
).success(function(data, status, headers, config) 
console.log(data);
).error(function(data, status, headers, config) 

);

把data赋给你的变量,log一下需要那个字段就显示那个字段好了。

参考技术A 为啥ajax请求返回的内容会是一个html页面?
若是实在要这么搞,就不是angularJS的事了,搜一下 “html字符串转为dom”吧

在 angularjs 中使用 $http.post() 时出现 CORS 问题

【中文标题】在 angularjs 中使用 $http.post() 时出现 CORS 问题【英文标题】:CORS issue when using $http.post() in angularjs 【发布时间】:2015-07-02 12:33:36 【问题描述】:

我正在创建一个用于使用 IdentityServer 3 的测试应用程序,并且我正在使用 AngularJs、Angular Ui 路由器和 oauth-ng 库来创建它。我的应用程序需要在客户端使用 OpenID 连接授权代码流。所以我对 oauth-ng 库做了很小的改动。我正在使用 oauth-ng lib 从 IdentityServer3 检索授权代码,并且我正在使用 $http.post() 将该代码发送到令牌端点并获取 access_token。

以下是我的代码..

JavaScript

.controller('LoginController', function ($scope, $http, $timeout, $location) 

        var getParamsFromUrl = function(url) 
            var splitted = url.split('?');
            splitted = splitted[1].split('&');
            var params = ;

            for (var i = 0; i < splitted.length; i++) 
                var param  = splitted[i].split('=');
                var key    = param[0];
                var value  = param[1];
                params[key] = value
            
            return params;
        ;

        var getToken = function (url, data) 
            return $http.post(url, data);
        ;



        if($location.absUrl().split('?')[1]) 
            $scope.params = getParamsFromUrl($location.absUrl());

            var tokenData = ;
            tokenData.grant_type = 'authorization_code';
            tokenData.code = $scope.params.code;
            tokenData.redirect_uri = 'http://localhost:8000/login.html';

            var tokenEndpoint = 'https://localhost:44333/core/connect/token';

            getToken(tokenEndpoint, tokenData)
                .then(function (data, status, headers, config) 
                    console.log(data);
                    console.log(status);
                    console.log(headers);
                    console.log(config);
                );

        
    );

授权码已成功检索,当我尝试连接到令牌端点时,它会在浏览器上引发以下错误。

选项https://localhost:44333/core/connect/token b @ angular.min.js:87n @ angular.min.js:82$get.f @ angular.min.js:80(匿名函数)@ angular.min.js:112$get.n.$eval @ angular.min.js:126$get.n.$digest @ angular.min.js:123$get.n.$apply @ angular.min.js:126(匿名函数)@ angular.min.js:17e @ angular.min.js:36d @ angular.min.js:17uc @ angular.min.js:18Jd @ angular.min.js:17(匿名函数)@ angular.min.js:250n.Callbacks.j @ jquery.min.js:2n.Callbacks.k.fireWith@jquery.min.js:2n.extend.ready @jquery.min.js:2I @jquery.min.js:2

XMLHttpRequest 无法加载 https://localhost:44333/core/connect/token。 请求中不存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:8000” 使用权。响应的 HTTP 状态代码为 405。

然后我尝试使用这行代码在应用程序配置中配置 $httpProvider。我的配置如下所示。

.config(function ($locationProvider, $httpProvider) 
        $locationProvider.html5Mode(true);
        $httpProvider.defaults.withCredentials = true; // <= Added this
    );

仍然遇到同样的问题。如何从客户端解决此问题?我可以从客户端解决这个问题吗?

【问题讨论】:

99% 是服务器端配置。遇到过几次,一直是服务器没有配置,先试试看服务器端吧。 CORS 是服务器端问题。试试enable-cors.org 好吧,我认为是 100% @charlietfl 感谢大家的快速回复。我会看看 :) 【参考方案1】:

非常确定代码授权流程适用于服务器端应用程序。如果您可以将客户端机密“保密”,则应仅使用代码授权!

他们是不使用隐式流程的理由吗?这样,您将在重定向中获得令牌战斗,而不是令牌。

在此页面上解释了流程。 http://connect2id.com/learn/openid-connect

【讨论】:

【参考方案2】:

您请求的服务不允许 CORS(没有访问控制作为响应的一部分发送)。您需要包含标头 Access-Control-Allow-Origin: * 作为响应的一部分。

看到这个:http://www.html5rocks.com/en/tutorials/cors/

另请参阅:http://better-inter.net/enabling-cors-in-angular-js/

【讨论】:

以上是关于Angularjs中$http.post返回的网页怎么获取某个元素的内容的主要内容,如果未能解决你的问题,请参考以下文章

困惑:AngularJS $http POST 响应返回索引文件的 HTML 内容

[Angularjs]$http.post与$.post

如何在AngularJS中丢弃预检响应

使用 Firefox 在 AngularJS 中成功回调 $http.post

AngularJS $http.POST 方法 405 错误

在 angularjs 中使用 $http.post() 时出现 CORS 问题