2017-06-06 107 views
0

邮政服务有一个API,允许您发送包裹重量,旅行信息等XML请求。它会返回一个XML响应。XML请求和响应与提取?

如何处理xml响应?我需要在客户端解析xml,或者更可取的是将xml放入一个变量中,我可以发送到我的laravel后端进行解析。

顺便说一句,我正在使用反应和laravel。

getPostagePrice =() => { 
    fetch('http://production.shippingapis.com/ShippingApi.dll?API=RateV4&XML=<RateV4Request USERID="XXXXXXXXXXX"><PackageID="1ST"><Service>PRIORITY</Service><ZipOrigination>44106</ZipOrigination><ZipDestination>20770</ZipDestination><Pounds>1</Pounds><Ounces>8</Ounces><Container>NONRECTANGULAR</Container><Size>LARGE</Size><Width>15</Width><Length>30</Length><Height>15</Height><Girth>55</Girth></Package></RateV4Request>', { 
     method: 'get', 
    }).then((response) => { 
     console.log(response.text()); 
    }).then(str => (new window.DOMParser()).parseFromString(str, "text/xml") 
    ).then(data => console.log(data)); 
} 
+0

读取[抓取文档】(https://developer.mozilla.org/en/docs/Web/API/Fetch_API)...通常你会'。然后((响应)=> response.text ())'然后下一个。然后文本可用......即用'return response.text()'替换'console.log(response.text())',以便**返回** –

+0

@JaromandaX注意,“something”是一个'Promise','.text()','.blob()','.arrayBuffer()',如果在环境中实现了'.formData()', 'Response'对象每个都返回一个'Promise' – guest271314

+0

我的观点是,第一个.then根本没有返回任何东西,并且确实表明它应该返回'response.text()' - 所以,不知道什么点你正在试图制作@ guest271314 –

回答

1

Response.text()返回Promise,链.then()得到.text()通话Promise值。

如果你期待一个PromisegetPostagePrice功能,从getPostagePrice()通话returnfetch()调用返回。

getPostagePrice =() => { 
    fetch('/path/to/server') 
    .then(response => response.text()) 
    .then(str => (new window.DOMParser()).parseFromString(str, "text/xml")) 
    .then(data => console.log(data)); 
} 
+0

@JasparLamarCrab请参阅[如何让用户输入颜色非十六进制或rbga)列表自定义,但确保它是有效的](https://stackoverflow.com/questions/44361825/how-to-allow-user-to-input-a-color-non-hex-or-rbga -for-list-customization-but/44362289#44362289)的类似模式 – guest271314