gpt4 book ai didi

ios - ionic 3 响应状态为 : 0 for URL: null

转载 作者:行者123 更新时间:2023-12-01 18:05:02 25 4
gpt4 key购买 nike

我有一个 Ionic 3 应用程序。我最近添加了iOS平台。

当我在 iOS(模拟器和设备)上运行它时,所有具有 header 的服务器请求都失败并出现错误 “响应状态:0 对于 URL:空” .在 Android 上,这些请求可以正常工作。

如果我提出请求 没有标题 我从服务器得到预期的响应。

我知道问题出在 WKWebView CORS .服务器已正确配置 CORS。我用 做请求@角/http 模块。

让我们看一些代码。

这是我向服务器发出请求的提供者:

import { Injectable } from '@angular/core';
import { Content } from 'ionic-angular';
import { Http, Headers, RequestOptions, URLSearchParams } from '@angular/http';
import { HTTP } from '@ionic-native/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { Globalization } from '@ionic-native/globalization';

import { Globals } from '../providers/globals';

...

/// Here we have one example Request (it's inside a method)

/// Here I create the URL for the request
let url = this.server_url + this.server_functions.doSearch;

/// Now I create the Headers for the Request
let headers = new Headers();
/// As You can see, I have tried to pass diferent headers to server
// headers.append("Access-Control-Allow-Origin","*");
// headers.append("Origin", "https://localhost:8080");
// headers.append("Access-Control-Allow-Methods","POST, GET, OPTIONS, PUT");
// headers.append("Accept","application/json");
// headers.append("Content-Type","application/json; charset=utf-8");

/// If the user is logged in I have to send this headers to server
if ( !this.globals.guestMode ) {
headers.append("TokenAuth", this.globals.getLogRegData()["TokenAuth"]);
headers.append("IdAuth", this.globals.getLogRegData()["IdAuth"]);
}

/// And here we start the GET Request
this.http.get( url, { headers: headers } ).map(res => res.json()).subscribe(
data => {
// console.log( JSON.stringify(data) );
callback( data );
},
err => {
console.log("ELOL: "+err);
}
);

另一方面,我决定尝试使用 @ionic-native/http 模块(正如您在导入中看到的那样)以避免 WKWebView 和 CORS 问题,但是当我使用它进行请求时,我收到了这个错误:
WARN: Native: tried calling HTTP.get, but the HTTP plugin is not installed.
WARN: Install the HTTP plugin: 'ionic cordova plugin add cordova-plugin-advanced-http'

这就是我使用 native 插件执行请求的方式:
this.httpnative.get(url, {}, {})
.then(data => {

console.log(data.status);
console.log(data.data); // data received by server
console.log(data.headers);

})
.catch(error => {

console.log(error.status);
console.log(error.error); // error message as string
console.log(error.headers);

});

这是我的 app.module.ts 的一个片段:
import { HttpModule } from '@angular/http';
import { HTTP } from '@ionic-native/http';
...
@NgModule({
...
imports: [
...
HttpModule,
HTTP,
...

],
})

我希望有人能给我一些启示,因为我迷失在 Ionic 的道路上。

谢谢你。

最佳答案

为了避免 CORS 问题特别在 iOS您必须使用 @ionic-native/http 插件,它实际上是用于 API 调用的高级 HTTP 插件。

请按照以下步骤使用此插件

第一步:添加Http原生插件

$ ionic cordova plugin add cordova-plugin-advanced-http
$ npm install --save @ionic-native/http

安装链接: HTTP

第二步:在您想要调用 API 的文件中导入 HTTP 原生插件。
import { HTTP, HTTPResponse } from '@ionic-native/http';

第三步:如何使用此插件进行 API 调用?
constructor(public httpPlugin: HTTP) {

}

//Set header like this
this.httpPlugin.setHeader("content-type", "application/json");

//Call API
this.httpPlugin.get(this.url, {}, {}).then((response) => {
//Got your server response
}).catch(error => {
//Got error
});

希望这会帮助你。

关于ios - ionic 3 响应状态为 : 0 for URL: null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49170019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com