2011-11-13 2 views
1

次のコードは、私はGoogle App Engineの(パイソン)で「チュー」を取得しようとすると、それが定義されていないので、動作していないよう:は私がローカルホストとSDKにはXMLHttpRequestを()テストすることができますか?

chooser = self.request.get("chooser") 
self.response.out.write("chooser: %s " % chooser) 
#returns "chooser:" without any value 

は、この有効なJavaScriptですか?

var formData = new FormData(); 
    formData.append("chooser", user); 

    var xhr = new XMLHttpRequest(); 
    //is it ok to test this with localhost? 
    xhr.open("POST", "http://localhost:8086/g/choicehandler", true); 
    xhr.onreadystatechange = function (aEvt) { 
    if (xhr.readyState == 4 && xhr.status == 200){ 
     console.log("request 200-OK"); 
    } 
    else { 
     console.log("connection error"); 
    } 
    }; 
    xhr.send(formData); 

XHRコールやアプリケーションに問題はありますか?

私は「チュー」はダニエル・ローズマンさんのコメントのとおりであるものを明確にするために/choice内のコードを含めています

UPDATE:私は形式でユーザ名を割り当てwriteToStorage()を持って

ハンドラ/choiceuser1, user2とそれで、それをlocalStorageに書いてください。

ユーザー名をlocalStorageに書き込んだ後、アプリケーションのデータベースに書き込む必要があります。xhrを使用して、/g/choicehandlerハンドラに送信します。私が気づいた2

class Choice(webapp.RequestHandler): 
    def get(self): 
     self.response.out.write(""" 
<html> 
    <head> 
<script type="text/javascript"> 

var count = 0; 

function writeToStorage() 
{ 
    var user = "user" + count; 
    count++; 
    localStorage.setItem("chooser", user); 

    var formData = new FormData(); 
    formData.append("chooser", user); 

    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", "http://localhost:8086/g/choicehandler", true); 
    xhr.onreadystatechange = function (aEvt) { 
    if (xhr.readyState == 4 && xhr.status == 200){ 
     console.log("request 200-OK"); 
    } 
    else { 
     console.log("connection error"); 
    } 
    }; 
    xhr.send(formData); 
}; 

</script> 

    </head> 
    <body> 


<form name="choice_form" id="choice_form" action="/g/choicehandler" method="post" onsubmit="writeToStorage()"> 
    <textarea name="choice" rows="7" cols="50"></textarea><br /> 
    <input type="submit" value="submit your choice"> 
</form> 

    </body> 
</html>""") 

UPDATE:

ので、 "チュー"、私は信じている文字列は、私は/choiceハンドラの下にコピーし

var user = "user" + count; 

で作られていますXHRで送信される「選択」と「チュー」でテキストエリアからのテキストが一緒に示されていないログ、そのうちの一つが値なしで常に:

INFO ... chooser: user0 choice: 
INFO ... chooser: choice: abcd 

INFO ... chooser: user0 choice: 
INFO ... chooser: choice: efgh 

これは、上記のログ用のコードです:

chooser = self.request.get("chooser") 
choice = self.request.get("choice") 
logging.info("chooser: %s choice: %s" % tuple([chooser, choice])) 


new_choice = User(
    choice = choice, 
    owner = chooser) 

new_choice.put() 

ので、データストアに、私は「チュー」と2つの異なる行に書かれた「選択」を参照してください。私は間違って何をしていますか?

+1

それは、このスクリプトを使用して、ページ限りOKですまた、ローカルホストから提供されては:「チュー」をすることになっている何8086 –

+0

? –

+0

'user'はあなたのjavascriptの値を持っていますか?テストのために文字列リテラルに置き換えようとしましたか?@DanielRoseman; –

答えて

1

実はあなたは二回、フォームを提出しています。かつてAJAX経由でwriteToStorageに入っていて、フォームの通常の方法でも。あなたは2つのことを変えなければなりません。

  1. writeToStorage

    は、それがwriteToStorageにAJAXを介して行われるよう
  2. は、あなたのonsubmitからonsubmit="return writeToStorage()"

あなたは、フォームのデフォルトの送信を防止します。この方法を変更する最後のアクションとしてfalseを返すことがあります

関連する問題