2017-12-07 8 views
0

JS関数を呼び出すと、投稿要求が送信されることを達成しようとしています。私のブラウザでは、私は送るでしょう:JavascriptのシリアライズされたPOST

http://myuser:[email protected]:80/api/callAction?deviceID=185&name=turnOn 

これは動作します。しかし、私のコードではそうではありません。

重要事項: - Chromeはエラーを発生させます:リクエストはアクセスコントロールをパスしません。 Chromeでこれを無効にすると、このエラーは表示されません(ただし、サーバーからの応答はありません)。

<script type="text/javascript"> 

    function changestate() { 
     var http = new XMLHttpRequest(); 
     http.withCredentials = true; 
     var user = "bassie" 
     var pass = "password" 
     var url = "http://hc2/api/callAction"; 
     var params = "deviceID=185&name=turnOff"; 
     http.open("POST", url, true); 
     http.setRequestHeader("Authorization", "Basic " + user + ":" + pass); 
     //Send the proper header information along with the request 
     http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     alert(http.responseText); 
     http.onreadystatechange = function() {//Call a function when the state changes. 
      if(http.readyState == 4 && http.status == 200) { 
        alert(http.responseText); 
      } 
     } 
     http.send(params); 
    } 

</script> 
+0

「hc2」はJavascriptでWebページを含むサーバーの名前ですか? – Barmar

+0

問題を探していただきありがとうございます。 HC2は、ポストリクエスト(ターゲットサーバ)を取得するサーバの名前です。 – Bassie

+0

リクエストを送信しているサーバーの名前でもない場合は、クロスドメインAJAXを実行しています。 – Barmar

答えて

1

ブラウザの場所にURLを置くに相当GET要求、ないPOSTです。

クロスドメインリクエストを送信しているため、(オリジンサーバーでプロキシを中継しない限り)レスポンスを読み取ることはできません。したがって、http.responseTextを読み取ることはできず、単にonreadystatechange関数を省略することができます。あなたはそれを仮定しなければならないでしょう

function changestate() { 
    var http = new XMLHttpRequest(); 
    http.withCredentials = true; 
    var user = "bassie" 
    var pass = "password" 
    var url = "http://hc2/api/callAction"; 
    var params = "deviceID=185&name=turnOff"; 
    http.open("GET", url + "?" + params, true); 
    http.setRequestHeader("Authorization", "Basic " + user + ":" + pass); 
    http.send(); 
} 
0

最終的には、一種のプロキシのような作成を終了しました。これが主要な要素でした。この例では(私のスクリプトは要求されたHTTPを取得します)、出力を取得しません。

req = urllib.request.Request('http://hc2:80/api/callAction?param1=1&param2=2') 
    credentials = ('%s:%s' % ('user', 'password')) 
    encoded_credentials = base64.b64encode(credentials.encode('ascii')) 
    req.add_header('Authorization', 'Basic %s' % 
    encoded_credentials.decode("ascii")) 
    response = urllib.request.urlopen(req) 
関連する問題