2016-11-21 5 views
0

私はAngularJSからPythonにPOSTリクエストをしています。 JavaScriptの例から始めました。すべての値が正しく返されます。 しかし、私がAngularJSからそれをやろうとすると、投稿された変数の値を読み取ることができません。 (バック名の私は値(マイクを取得することができるよ))正常に動作し

JAVASCRIP例:

<script language="Javascript"> 
    function asyncChange() 
    { 
     var request;  
     if (window.XMLHttpRequest) { 
     request = new window.XMLHttpRequest(); 
     } else { 
     // Versiones antiguas de Internet Explorer. 
     request = new window.ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     request.open("POST","nctest.py" , true); 
     request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     request.send("Name=Mike");  
     request.onreadystatechange = function() 
     { 
     if (request.readyState == 4 && request.status == 200) 
     { 
      document.getElementById("myLabel").innerHTML = "Hello " + request.responseText + "!"; 
     } 
     } 
    } 
    </script> 

nctest.py JSコード

#!/usr/bin/python 
import cgi  
input = cgi.FieldStorage() 
print "Content-type: text/html\n\n" 
print "input[Pe].value: " 
print input["Pe"].value 

ANGULARJSはありませんWORKは、適切に(私は名前の(マイク)バック値を取得することはできませんよ): Angularjsコード:

(function(){ 
    'use strict'  
    var sectest= { 
     controller:sectestCtrl, 
     templateUrl:'app/components/component_test/test.html', 
    } 

    angular 
     .module('myapp') 
     .component('secTest',sectest); 

     function sectestCtrl($http){ 
      var prac= this; 
      prac.method = 'POST'; 
      prac.url = 'nctest.py'; 
      prac.data = {Name : 'Mike'}; 
      prac.data_answer 
      prac.headers = { 'Content-Type': 'application/x-www-form-urlencoded' }; 

      prac.sendHTML = send; 

      function send(){ 
        prac.code = null; 
        prac.response = null; 
        $http({method: prac.method, headers: prac.headers, url: prac.url, data: $.param(prac.data)}). 
        then(function(response) { 
         prac.status = response.status; 
         prac.data_answer = response.data; 
         console.log("OK prac.data_answer: ", prac.data_answer) 
        }, function(response) { 
         prac.data_answer = response.data || 'Request failed'; 
         prac.status = response.status; 
        }); 
      }; 

     }    
})(); 

nctest.pyコード

#!/usr/bin/python 

import json 
import cgi 
input = cgi.FieldStorage() 

print "Content-type: text/html\n\n" 
print input["Name"].value 

問題はそのprac.data_answer印刷ブランク値です。 私はすでにangularjsとPythonコードの両方のための異なるヘッダを試すいるが、どれも動いていないようにみえます:

prac.headers = { 'Content-Type': 'application/json' }; 
prac.headers = { 'Content-Type': 'application/x-www-form-urlencoded' }; 
prac.headers = { 'Content-Type': 'text/html\n\n' }; 

感謝を。

+0

ないPythonの開発者が、角度1と$ HTTP({メソッド::prac.method、ヘッダ:prac.headers、URL:prac.url、データ:$の.PARAM(prac.data)これを試してみてください})は、 'nctest.py'というURLに送信します そのnctest.pyはURLエンドポイントですか? –

+1

確かに。 nctest.pyはURLのエンドポイントです。 –

答えて

0

解決しようとしている問題は2つあります。サーバー(CGI)&クライアント(angularjs)。まず、[ネットワーク]タブのChromeデベロッパーツールを使用して、ネットワーク経由でデータを受信して​​いることを確認します。そうであれば、Content-Typeをjsonに変更する必要はありません。デフォルトでは、すべてのhttpデータがjson形式であると仮定しているためです。

投稿リクエストにこれらの属性がすべて必要とは思われません。それがより簡単にできるときは、過剰殺人者のように見えます。

$http.post(url, data).then(function(response){ 
console.log(response.data); 
}); 
+0

今日はコードが動作することに決めました。ちょうど質問にあるように。私は昨日何が起こっていたのか分からないが、今は働いている。とにかくY C。ありがとう –

関連する問題