【发布时间】:2019-03-12 17:44:27
【问题描述】:
我正在使用 cordova-plugin-advanced-http 插件进行 API 调用,并且所有 JSON 启用的 API 工作正常,但我有一个 XML 嵌入式 API 在 Postman 中工作正常,但是当我从 ionic 调用它时,它的参数没有得到服务器端。
以下是我的 XML API 代码:
类型 1:
let headers = {
"Content-type": 'text/xml; charset=utf-8',
"Authorization": token,
};
let xmlBody =
'<ServiceRequest>' +
'<CaseNumber>' + caseNumber +
'</CaseNumber>' +
'</ServiceRequest>'
this.httpPlugin.setDataSerializer('utf8');
this.httpPlugin.post('https://test.com/Service', xmlBody, headers).then((response) => {
console.log("XML Response : ", JSON.stringify(response.data));
xml2js.parseString(response.data, function (err, result) {
console.log("XML parser success:", result);
console.log("XML parser error:", err);
if (result) {
resolve(result);
} else {
reject(err);
}
});
}).catch(error => {
if (error.status == 403) {
console.log("Token expired : " + JSON.stringify(error));
} else {
console.log("Error : " + error.error);
console.log("Error " + JSON.stringify(error));
reject(error);
}
});
类型 2:
let xmlBody = '<ServiceRequest>' +
'<CaseNumber>' + caseNumber +
'</CaseNumber>' +
'</ServiceRequest>';
console.log("XML Body", xmlBody)
// this.httpPlugin.setRequestTimeout(60);
this.httpPlugin.setDataSerializer('utf8');
this.httpPlugin.setHeader('*', 'authorization', token);
this.httpPlugin.setHeader('*', 'Content-Type', "application/x-www-form-urlencoded");
this.httpPlugin.post('https://test.com/Service', xmlBody, {}).then((response) => {
console.log("XML Response : ", JSON.stringify(response.data));
xml2js.parseString(response.data, function (err, result) {
console.log("XML parser success:", result);
console.log("XML parser error:", err);
if (result) {
resolve(result);
} else {
reject(err);
}
});
}).catch(error => {
if (error.status == 403) {
console.log("Token expired : " + JSON.stringify(error));
} else {
console.log("Error : " + error.error);
console.log("Error " + JSON.stringify(error));
reject(error);
}
});
它一直在从服务器抛出错误并且使用相同的请求,我能够在邮递员以及本机 iOS 代码中获取数据。
我在 GitHub 上提到了this 问题,但仍然没有成功。
虽然无法在服务器上获取数据,但我缺少一些东西。
帮我解决这个问题。
【问题讨论】:
-
我有一个类似的问题。 angular/http 或 native-http,都无法将数据传递到服务器。相同的代码适用于 android,但不适用于 ios。
-
你解决了吗?
-
我无法通过 POST 发送数据,因为库没有进行正确的序列化。我的 api 也接受 GET,所以我现在通过 GET 到达 API 并在 url 中传递参数,使用
encodeURI(urlWithParameters, null, null) -
由于我的 API 不支持 GET 仅允许在我的情况下发布,所以仍然无法解决上述问题,因为很长时间以来一直在苦苦挣扎,但没有找到任何解决方案。
-
您是否将 Postman 发送的请求标头与您的应用程序发送的请求标头进行了比较?有时它只是一个小错误或一个丢失的标题导致问题。对请求正文进行相同的比较。如果两者相同,则会假设服务器会以相同的结果响应。
标签: ios xml ionic-framework ionic3 cordova-plugin-advanced-http