我想通過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>
而且它我得到這些瀏覽錯誤:
我使用允許控件允許來自Chrome Webstore的原點插件以防止出現一些CORS錯誤。
問題是:在linux通過curl我能夠正確地與調制解調器通信,但與jQuery沒有。
任何人都可以提供一些幫助嗎?
謝謝!
那麼,jQuery版本出了什麼問題?你忘了告訴我們。發生了什麼錯誤和/或意外的行爲?我的第一個想法是一個CORS錯誤,這是你不可能克服的問題。如果ajax調用的頁面與被調用的服務器不在同一個IP地址上(即http://192.168.1.1),則需要CORS。但是如果調制解調器在響應中發送CORS頭文件,我會感到驚訝。我可能是錯的,但這是我要檢查的第一件事。應該很容易在瀏覽器控制檯中發現這樣的錯誤。 – ADyson
我編輯了帖子,並添加了一些來自linux和jquery的日誌和http響應。爲了防止CORS錯誤,我使用「允許控制允許原點」插件。它不是一種專業的方式,但它適用於我。謝謝!! – MeuMicoMicoMeu