interesante, ya que resulta que sólo se puede utilizar request.data
si los datos se publicó, con un tipo MIME ese frasco no puede manejar, por lo demás es una cadena vacía ""
Creo que los documentos no fueron muy claros, hice algunas pruebas y ese parece ser el caso, puedes echar un vistazo a la salida de la consola que genera el matraz cuando ejecutas mis pruebas.
solicitud entrante de datos
datos
contiene los datos de la solicitud entrantes como cadena en caso de que venía con un tipo MIME frasco no maneja.
tomado de http://flask.pocoo.org/docs/api/
pero ya que estamos haciendo un estándar POST
usando JSON flask
puede manejar esto muy bien, como tal, se puede acceder a los datos de la norma request.form
este ss=str(request.form)
debe hacer el truco como he probado.
Como nota al margen @crossdomain(origin='*')
esto parece peligroso, hay una razón por la cual no permitimos las solicitudes a través de sitios cruzados, aunque estoy seguro de que tiene sus razones.
este es el código completo que he usado para las pruebas:
from flask import Flask
app = Flask(__name__)
from datetime import timedelta
from flask import make_response, request, current_app
from functools import update_wrapper
def crossdomain(origin=None, methods=None, headers=None,
max_age=21600, attach_to_all=True,
automatic_options=True):
if methods is not None:
methods = ', '.join(sorted(x.upper() for x in methods))
if headers is not None and not isinstance(headers, basestring):
headers = ', '.join(x.upper() for x in headers)
if not isinstance(origin, basestring):
origin = ', '.join(origin)
if isinstance(max_age, timedelta):
max_age = max_age.total_seconds()
def get_methods():
if methods is not None:
return methods
options_resp = current_app.make_default_options_response()
return options_resp.headers['allow']
def decorator(f):
def wrapped_function(*args, **kwargs):
if automatic_options and request.method == 'OPTIONS':
resp = current_app.make_default_options_response()
else:
resp = make_response(f(*args, **kwargs))
if not attach_to_all and request.method != 'OPTIONS':
return resp
h = resp.headers
h['Access-Control-Allow-Origin'] = origin
h['Access-Control-Allow-Methods'] = get_methods()
h['Access-Control-Max-Age'] = str(max_age)
if headers is not None:
h['Access-Control-Allow-Headers'] = headers
return resp
f.provide_automatic_options = False
return update_wrapper(wrapped_function, f)
return decorator
@app.route("/", methods=['POST'])
@crossdomain(origin='*')
def hello():
ss=str(request.form)
print 'ss: ' + ss + ' request.data: ' + str(request.data)
return ss
@app.route("/test/")
def t():
return """
<html><head></head><body>
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script type='text/javascript'>
jQuery.ajax(
{
type: "POST",
dataType: "json",
data: "adasdasd",
url: 'http://127.0.0.1:5000/',
complete: function(xhr, statusText)
{ alert(xhr.responseText) }})
var oReq = new XMLHttpRequest();
oReq.open("POST", "/", false);
oReq.setRequestHeader("Content-Type", "unknown");
oReq.send('sync call');
alert(oReq.responseXML);
</script></body></html>
"""
if __name__ == '__main__':
app.run()
de salida:
$ python test.py
* Running on http://127.0.0.1:5000/
127.0.0.1 - - [07/Aug/2012 02:45:28] "GET /test/ HTTP/1.1" 200 -
ss: ImmutableMultiDict([('adasdasd', u'')]) request.data:
127.0.0.1 - - [07/Aug/2012 02:45:28] "POST/HTTP/1.1" 200 -
ss: ImmutableMultiDict([]) request.data: sync call
127.0.0.1 - - [07/Aug/2012 02:45:28] "POST/HTTP/1.1" 200 -
127.0.0.1 - - [07/Aug/2012 02:45:29] "GET /favicon.ico HTTP/1.1" 404 -
y mi sistema:
$ python --version
Python 2.6.1
$ python -c 'import flask; print flask.__version__;'
0.8
$ uname -a
Darwin 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386
usando Google Chrome Version 20.0.1132.57
umm Tal vez se devuelve algo, pero no están haciendo nada con ella –
Trate de usar 'función del éxito de ajax' y manipule los datos como lo necesite también 'success (data, textStatus, jqXHR) Function, Array Una función a ser llamada si la solicitud tiene éxito. La función recibe tres argumentos: los datos devueltos por el servidor, formateados según el parámetro dataType; una cadena que describe el estado; y el objeto jqXHR (en jQuery 1.4.x, XMLHttpRequest). A partir de jQuery 1.5, la configuración de éxito puede aceptar una serie de funciones. Cada función se llamará a su vez. Este es un Evento de Ajax. –
pero lo estoy probando con alerta (xhr.responseText), no hay nada en la respuestaTexto – Noor