¿Puedo probar XMLHttpRequest () en SDK con localhost?

El siguiente código no parece funcionar porque cuando bash obtener el “selector” en Google App Engine (Python) no está definido:

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

¿Es este javascript válido?

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

¿Es el problema con la llamada XHR o con la aplicación?

ACTUALIZAR

Incluyo el código en /choice para aclarar qué es “selector” según el comentario de Daniel Roseman:

En el controlador de /choice tengo writeToStorage() que asigna un nombre de usuario en la forma user1, user2 y así sucesivamente, y lo escribe en localStorage .

Después de escribir el nombre de usuario en localStorage , también necesito escribirlo en la base de datos en la aplicación, y uso xhr para enviarlo a /g/choicehandler handler.

Entonces, “elector”, creo que es una cadena, hecha de

 var user = "user" + count; 

Copio /choice controlador de /choice continuación:

 class Choice(webapp.RequestHandler): def get(self): self.response.out.write("""    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); };     
""")

ACTUALIZACIÓN 2

Noté en los registros que el texto de textarea que es “elección” y “selector” que se envía con xhr no se muestran juntos, uno de ellos siempre tiene un valor:

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

Este es el código para el registro anterior:

 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() 

así que en el almacén de datos veo “selector” y “elección” escritos en 2 filas diferentes. ¿Qué estoy haciendo mal?

En realidad estás enviando el formulario dos veces. Una vez en writeToStorage a través de AJAX y también con la forma normal con el formulario. Tendrás que cambiar dos cosas.

  1. writeToStorage tiene que devolver false como la última acción
  2. Cambie su onsubmit a onsubmit="return writeToStorage()"

De esta manera, evitará el envío predeterminado de su formulario, ya que se hará a través de AJAX en writeToStorage