我在使用JavaScript发送xml时遇到问题。我试图效仿其他人做过的事,但我没有成功。我的XML Syntax Error: Please check the XML request to see if it can be parsed.
代码为80040B19
。
这是我的代码。我正在尝试使用USPS地址验证API。在doc的第4页上,有更多信息。
const apiUrl = 'http://production.shippingapis.com/ShippingAPI.dll?API=Verify';
validate(address: Object): any {
const payload = this.xmlBuilder.buildObject({
AddressValidateRequest: {
$: { USERID: 'XXXXXXXXX' }, // api key hidden
Address: {
$: { ID: '0'},
FirmName: null,
Address1: address['address2'],
Address2: address['address1'], // NOT A TYPO, they swap it
City: address['city'],
State: 'NY',
Zip5: address['postal_code'],
Zip4: null
}
}
});
console.log(payload); // SEE BELOW
const headers = new Headers({ 'Content-Type': 'text/xml' });
const options = new RequestOptions({ headers: headers });
return this.http.post(this.apiUrl, { 'XML': payload }, options)
.map((res) => {
this.parseXMLStringToObject(res.text(), (err, result) => {
console.log(result);
});
});
}
这是我的有效负载上的console.log读取的内容。我已经验证了这个字母,从xml标签的顺序到必需的标签,但是可选的值。我很肯定有效载荷是正确的。
<AddressValidateRequest USERID="XXXXXXXXX">
<Address ID="0">
<FirmName/>
<Address1/>
<Address2>620 Eighth Avenue</Address2>
<City>New York</City>
<State>NY</State>
<Zip5>10018</Zip5>
<Zip4/>
</Address>
</AddressValidateRequest>
我能想到的一件事是我不知道怎么没有正确使用http,而且我不知何故发送了一个空白的xml。
在他们的文档中,他们列出了: https://servername/ShippingAPI.dll?API=Verify&XML= ........
我注意到我没有在网址中执行XML
,但我假设当我输入Content-Type:text / xml时,它会被转换。我也尝试过application / xml,它会产生同样的错误。
答案 0 :(得分:1)
从USPS网站上的文档看来,调用似乎不是带有XML作为有效负载的POST,而是带有XML的GET(我想urlencoded)在URL XML参数中。