2017-09-04 51 views
0

我想通過http與HUAWEI E3272 USB調制解調器交換數據。 Linux的我有一些成功使用curl:Jquery Ajax GET方法頭問題

curl -X GET "http://192.168.1.1/api/device/information" -H "__RequestVerificationToken: $(curl -s -X GET http://192.168.1.1/api/webserver/token | grep token | cut -d '>' -f2 | cut -d '<' -f1)" -H "Content-Type: text/xml" 

獲得正確的響應:

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
<DeviceName>E3272</DeviceName> 
<SerialNumber>S7CBY14A17006941</SerialNumber> 
<Imei>862600021252600</Imei> 
<Imsi>724051120127678</Imsi> 
<Iccid>89550536110015952771</Iccid> 
<Msisdn></Msisdn> 
<HardwareVersion>CH1E3272SM</HardwareVersion> 
<SoftwareVersion>22.470.09.00.150</SoftwareVersion> 
<WebUIVersion>13.100.11.00.150</WebUIVersion> 
<MacAddress1>00:0D:87:8E:4B:AC</MacAddress1> 
<MacAddress2></MacAddress2> 
<ProductFamily>LTE</ProductFamily> 
<Classify>hilink</Classify> 
</response> 

但我需要用jQuery做。我也嘗試過100次,但我錯過了一些我不知道它是什麼的東西。在調用方法之前,我需要通過某個標頭傳遞一個標記。我知道「g_requestVerificationToken」正確地獲取了值,因爲我把它放下了。

這是我的腳本:

var g_requestVerificationToken = ''; 
var headers = {}; 
    $.ajax({ 
    type: 'GET', 
    url: "http://192.168.1.1/api/webserver/token", 
    crossDomain: true, 
    dataType: 'xml', 
    success: function(data) { 
    g_requestVerificationToken = (data).find("response").find("token").text(); 
    headers['__RequestVerificationToken'] = g_requestVerificationToken; 
    $.ajax({ 
    type: 'GET', 
    async: false, 
    headers: headers, 
    url: "http://192.168.1.1/api/device/information", 
    crossDomain: true, 
    ContentType: 'text/xml', 
    success: function(data) { 
    console.log(data); 
    }}); 
    }}); 

返回此錯誤(東陽我無法通過頭通過令牌會話):

<?xml version="1.0" encoding="UTF-8"?> 
<error> 
<code>125001</code> 
<message></message> 
</error> 

而且它我得到這些瀏覽錯誤:

errors log

我使用允許控件允許來自Chrome Webstore的原點插件以防止出現一些CORS錯誤。

問題是:在linux通過curl我能夠正確地與調制解調器通信,但與jQuery沒有。

任何人都可以提供一些幫助嗎?

謝謝!

+0

那麼,jQuery版本出了什麼問題?你忘了告訴我們。發生了什麼錯誤和/或意外的行爲?我的第一個想法是一個CORS錯誤,這是你不可能克服的問題。如果ajax調用的頁面與被調用的服務器不在同一個IP地址上(即http://192.168.1.1),則需要CORS。但是如果調制解調器在響應中發送CORS頭文件,我會感到驚訝。我可能是錯的,但這是我要檢查的第一件事。應該很容易在瀏覽器控制檯中發現這樣的錯誤。 – ADyson

+0

我編輯了帖子,並添加了一些來自linux和jquery的日誌和http響應。爲了防止CORS錯誤,我使用「允許控制允許原點」插件。它不是一種專業的方式,但它適用於我。謝謝!! – MeuMicoMicoMeu

回答

0

據我所見,您的CORS設置使得jQuery通過HTTP OPTIONS調用(而不是直接HTTP GET)做一個預飛行查詢。你的服務器告訴它它沒有實現OPTIONS方法,因此返回HTTP 501,jQuery在那個時候拋出了毛病。

我想看看,如果你可以完全避免CORS的麻煩 - 或者實現HTTP OPTIONS返回適當的服務器端CORS頭。