2010-05-25 52 views
0

我正在開發Google App Engine(python sdk),我想用jQuery發送一個Ajax請求來存儲問題的答案。通過AJAX將用戶輸入的文本發送到Google App Engine的最佳方式是什麼?

將此數據發送到服務器的最佳方式是什麼?目前我有:

function storeItem(question_id) { 
     var answerInputControl = ".input_answer_"+question_id; 
     var answer_text = $(answerInputControl).text(); 
     $.ajax({ 
      type: "POST", 
      url: "store_answer.html", 
      data: "question="+question_id, 
      success: function(responseText){ 
       alert("Retrieved: " + responseText); 
      } 
     }); 
    } 

這需要一個問題ID並通過查詢字符串提供給服務器。但在服務器端,我無法訪問我想要存儲的答案控件的內容。沒有Ajax,我能夠用下面執行此操作:

class StoreAnswers(webapp.RequestHandler): 
def post(self): 
    question_id = self.request.get("question_id") 
    answer_text = self.request.get("input_answer" + question_id) 

但通過Ajax做這個電話時,我answer_text是空的。

  • 我是否需要將此控件的內容作爲Ajax請求的數據的一部分發送?
  • 是否將控件本身添加到查詢字符串?它的內容?內容可能長達幾百個字符是否重要?這是最推薦的做法嗎?
  • 如果將其作爲查詢字符串發送,那麼轉義內容的最佳方式是什麼?以便惡意用戶不會損害系統?

回答

2

ajax調用的data必須包括所有要發送的數據 - 張貼幾百個字符是絕對沒有問題的,它是最肯定的推薦方法。

使用GET代替POST - (我懷疑是你的「發送作爲查詢字符串」的意思),只會給你買各種各樣的麻煩,同時也違反GET的語義(應限於「只讀」查詢,沒有副作用的查詢)。

+0

我提到的查詢字符串,因爲我想在Ajax調用「數據:‘這一行的問題=’+ question_id」是建立一個查詢字符串,但我想我這是錯誤的。在通過ajax調用發送內容之前,通過什麼方式來轉義內容? – Cuga 2010-05-25 03:43:42

1

你的數據格式不正確:

data: { 
    question_id: question_id, 
    input_answer: $(answerInputControl).text() 
} 
+0

示例中的ajax請求未通過answerInputControl的文本發送。問題的一部分是如果我必須,或者如果我可以從python(self.request.get('input_answer_questionID'))訪問控件,它可以在沒有Ajax的情況下工作。感謝您提供發送數據的更好方式。 – Cuga 2010-05-25 04:02:03

相關問題