我尝试将现有的angularjs库更改为angular2以满足我的需要。下面代码中的http.post方法抛出TypeError {}作为异常。有人请帮忙,因为我被困在这上面。
login() {
return new Promise((resolve, reject) => {
if(typeof jsSHA !== "undefined") {
var signatureObj = (new OauthUtility()).createSignature("POST", this.magentoOptions.baseUrl+"/oauth/initiate", this.oauthObject, {oauth_callback: "http://localhost/callback"}, this.magentoOptions.clientSecret, null);
let headersInitiate = new Headers();
headersInitiate.append('Authorization',signatureObj.authorization_header);
headersInitiate.append('Content-Type','application/x-www-form-urlencoded');
let url = this.magentoOptions.baseUrl + "/oauth/initiate";
let callback = "oauth_callback=http://localhost/callback";
try{
this.http.post(url, callback,{headers: headersInitiate})
.subscribe(
(result) => {
console.log("i am inside");
var rParameters = (result).split("&");
.....
}
catch(Exception){
console.log(Exception)
}
答案 0 :(得分:1)
你应该尝试类似的东西:
var signatureObj = (new OauthUtility()).createSignature("POST",
this.magentoOptions.baseUrl+"/oauth/initiate", this.oauthObject,
{oauth_callback: "http://localhost/callback"},
this.magentoOptions.clientSecret, null); let headersInitiate = new Headers();
headersInitiate.append('Authorization',
signatureObj.authorization_header);
headersInitiate.append('Content-Type',
'application/x-www-form-urlencoded');
let url = this.magentoOptions.baseUrl + "/oauth/initiate";
let payload = ' ... ';
this.http.post(url, payload,{headers: headersInitiate})
.subscribe(
(result) => {
console.log("i am inside");
var rParameters = (result).split("&");
(...)
});
以下是我对您的代码的评论:
post
方法的第二个参数应该是与有效负载相对应的字符串而不是回调。我从标题中看到您要发送url编码的表单,因此您需要自己创建try catch
不是必需的,因为执行HTTP是异步的,并且可以捕获错误"在subscribe
方法的第二个参数(另一个回调)中。在解决所有这些问题之后,我认为你不再有错误......
希望它可以帮到你, 亨利
答案 1 :(得分:0)
在进行上述所有步骤后,我发现卡住了。完整的解决方案如下。 删除try catch块并按照Thierry的建议进行保证。 在构造函数中使用http的依赖注入,如下所示,以定义http。
import {Http,HTTP_PROVIDERS,Headers} from 'angular2/http';
import {Injector} from "angular2/core";
constructor() {
var injector = Injector.resolveAndCreate([HTTP_PROVIDERS]);
this.http = injector.get(Http);
}