ウェブサイト検索

angular - 'XMLHttpRequest' の 'setRequestHeader' を実行できませんでした: オブジェクトの状態は OPENED でなければなりません


私はRESTful APIのget()を使ってAngularアプリケーションを開発しています。401の認証エラーのようないくつかのエラーが発生しましたが、これは解決しました。現在、このエラーが発生しており、これはある意味で単純です。CORSパッケージも追加してみました。

私は無駄に解決策を探してきました。以前の質問を再編集しましたが、返答はないようです。

my-httpservice.service

import { Injectable } from '@angular/core';
import 'rxjs/add/operator/map';
import { Http, Response, Headers, RequestOptions, URLSearchParams } from 
'@angular/http';


@Injectable()
export class MyHttpserviceService {

constructor(private http:Http) {}

server_grid_Get(){

var request = new XMLHttpRequest();
var user = "Root";
var pass = "root";

//Use Basic authentication

request.setRequestHeader("Authorization", "Basic " + btoa(user + ":" + pass));
request.setRequestHeader('Content-Type','application/json');
request.setRequestHeader('Access-Control-Allow-Credential','true');

 request.open("GET", "http://192.100.00.000:0000/_db/xxxxx_app/_api/document/wsdl_test/4934434",true);

  return this.http.get("http://192.100.00.000:0000/_db/xxxx_app/_api/document/wsdl_test/4934434").map(response => response.json());


 request.addEventListener('load', function(event) {
    if (request.status >= 200 && request.status < 300) {
        console.log(request.responseText);
    } else {
        console.warn(request.statusText, request.responseText);
    }
  });
  request.send();
}
}

回答 #1

Angularガイドから

そのようなものを使うべきです(Angular 4.3以上/HttpModuleではなくHttpClientModuleを使用することを確認してください)

@Injectable()
export class MyHttpserviceService {      
  constructor(private http:HttpClientModule) {}
  private makeMyRequest () {
       return this.http.get("http://192.100.00.000:0000/_db/xxxx_app/_api/document/wsdl_test/4934434", {
            headers: new HttpHeaders()
                .set('Authorization', 'Basic ' + btoa(user + ':' + pass))
                .set('Content-Type','application/json')
                .set('Access-Control-Allow-Credential','true')
          });
  }
}

それからコンポーネント内で

<yourservice>.makeMyRequest().subscribe(data => {
     // anything you want
});

回答 #2

私の場合、ヘッダーの末尾に認証ヘッダー値として\n文字があり、それがすべての混乱の原因でした

関連記事