Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 错误:[object object]/XMLHttpRequest在以JSON形式提取XML数据时无法在Angular2中加载_Javascript_Json_Xml_Angular_Xmlhttprequest - Fatal编程技术网

Javascript 错误:[object object]/XMLHttpRequest在以JSON形式提取XML数据时无法在Angular2中加载

Javascript 错误:[object object]/XMLHttpRequest在以JSON形式提取XML数据时无法在Angular2中加载,javascript,json,xml,angular,xmlhttprequest,Javascript,Json,Xml,Angular,Xmlhttprequest,我试图将XML数据作为JSON拉入。执行此操作时,会出现以下错误: 无法加载XMLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“” 此外,我的警报错误代码仅说明[对象] http-test.service.ts import { Injectable } from 'angular2/core'; import { Http } from 'angular2/http'; import 'rxjs/add/opera

我试图将XML数据作为JSON拉入。执行此操作时,会出现以下错误:

无法加载XMLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“”

此外,我的警报错误代码仅说明[对象]

http-test.service.ts

import { Injectable } from 'angular2/core';
import { Http } from 'angular2/http';
import 'rxjs/add/operator/map';
import { AppComponent } from './app.component';

@Injectable()
export class HttpTestService{
  constructor (private _http: Http){}
  getData(){
    return this._http.get('http://www.w3schools.com/xml/cd_catalog.xml')
      .map(res => res.json());
  }
http-test.component.ts

import {Component} from 'angular2/core';
import {HttpTestService} from './http-test.service';
import { AppComponent } from './app.component';

@Component({
  selector: 'http-test',
  template:`
    <button (click)="onTestGet()">Test GET Request</button><br>
    <p>Output:</p>
    <textarea id="txtOut" rows="45" cols="100">{{getData}}</textarea>
  `,
  providers: [HttpTestService]
})

export class HttpTestComponent{
  getData: any;
  postData: string;

  constructor (private _httpService: HttpTestService){}

  onTestGet(){
    this._httpService.getTeams()
    .subscribe(
    data => this.getData = JSON.stringify(data),
    error => alert(error),
    () => console.log("Finished")
    );
  }
}
从'angular2/core'导入{Component};
从“./http test.service”导入{HttpTestService};
从“./app.component”导入{AppComponent};
@组成部分({
选择器:“http测试”,
模板:`
测试获取请求
输出:

{{getData}} `, 提供者:[HttpTestService] }) 导出类HttpTestComponent{ 获取数据:任何; postData:字符串; 构造函数(私有的_httpService:HttpTestService){} onTestGet(){ 这是.\u httpService.getTeams() .订阅( data=>this.getData=JSON.stringify(数据), 错误=>警报(错误), ()=>console.log(“完成”) ); } }
当我从JSON格式的URL(而不是XML)中提取时,此代码可以工作。不确定问题出在哪里,也不知道如何解决。谢谢

  • 这与您的angular应用程序无关,但事实上,服务器的响应中没有标题。为了证明这一点,下载,你的应用程序将自动工作。当然,这对用户不好,但可以在开发过程中为您节省一些痛苦。看起来您只是在尝试学习一些东西,所以这可能只是一个可以接受的用例。您还可以尝试使用不同的API来响应CORs

  • 不要对错误发出警报。它们违反了web最佳实践,大多数用户只会忽略/关闭它们,正如您所注意到的,它们不会显示对象或数组。我建议使用
    console.error('error!',error)
    ,以及某种flash消息服务。但是,您可能还希望在浏览器中签出“网络”选项卡

  • 您会注意到,实际上服务器的响应是200OK,但浏览器仍然会因为缺少标题而阻止XHR

  • 这与您的angular应用程序无关,但事实上,服务器的响应中没有标题。为了证明这一点,下载,你的应用程序将自动工作。当然,这对用户不好,但可以在开发过程中为您节省一些痛苦。看起来您只是在尝试学习一些东西,所以这可能只是一个可以接受的用例。您还可以尝试使用不同的API来响应CORs

  • 不要对错误发出警报。它们违反了web最佳实践,大多数用户只会忽略/关闭它们,正如您所注意到的,它们不会显示对象或数组。我建议使用
    console.error('error!',error)
    ,以及某种flash消息服务。但是,您可能还希望在浏览器中签出“网络”选项卡


  • 您会注意到,实际上服务器的响应是200 OK,但由于缺少标头,浏览器仍然会阻止XHR。

    如果您获取JSONP数据,或者服务器使用CORS标头,那么它会起作用,否则由于同源策略,它将不起作用。如果您获取JSONP数据,或者服务器使用CORS标头,那么它会起作用,否则,由于同源策略,它将无法工作。