Как лучше всего отправить введенный пользователем текст через AJAX в Google App Engine? - PullRequest
0 голосов
/ 25 мая 2010

Я занимаюсь разработкой в ​​Google App Engine (python sdk) и хочу использовать jQuery для отправки Ajax-запроса на сохранение ответа на вопрос.

Как лучше всего отправить эти данные на сервер? В настоящее время у меня есть:

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);
            }
        });
    }

Это берет идентификатор вопроса и предоставляет его серверу через строку запроса. Но на стороне сервера я не могу получить доступ к содержимому элемента управления ответами, который хочу сохранить. Без 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 ]

2 голосов
/ 25 мая 2010

* * * * * data в вашем вызове ajax должен включать все данные, которые вы хотите отправить - отправка нескольких сотен символов абсолютно не проблема, и это, безусловно, рекомендуемый подход.

Не не используйте GET вместо POST - , что (что, как я подозреваю, вы подразумеваете под "отправить как строку запроса"), будет только доставляет вам неприятности любого рода, и является нарушением семантики GET (которая должна быть ограничена запросами «только для чтения», без побочных эффектов).

1 голос
/ 25 мая 2010

Ваши данные неверно отформатированы:

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