2010-07-31 18 views
26

Estoy intentando averiguar por qué los métodos de poner/eliminar, en un sitio habilitado para HTML5, no funcionan con Chrome. Por lo que he buscado, parece que ha estado funcionando durante algún tiempo con Chrome, así que con eso dije que estoy buscando algunos consejos para reducir mi problema. Tal vez estoy implementando el formulario incorrecto, tal vez mi doctype está equivocado, quién sabe. Cualquier ayuda se agradece :)¿Los métodos HTML5 PUT/DELETE no funcionan en Chrome?

Por lo tanto, el código es el siguiente:

<!DOCTYPE html> 
<html> 

<head> 
     <title> 
      some_resource 
     </title> 
    </head> 
    <body> 
    <div class="content"> 
    <form method="put" action="/some_resource"> 
    <div> 
    <input id="title" name="title" placeholder="The Resource Title" type="text" value="" autofocus /> 
    </div> 
    <div> 
    <textarea id="body" name="body" placeholder="The Resource Body" required></textarea> 
    </div> 
    <div> 
    <input id="submit" name="submit" type="submit" value="Submit" /> 
    </div> 
    <!-- Resource Settings --> 
    <ul> 
    <li> 
    <input id="listed" name="listed" type="checkbox" value="y" /> 
    </li> 
    <li> 
    <input id="template" name="template" type="text" value="resource.html" /> 
    </li> 
    </ul> 
    </form> 
    </div> 
    </body> 
</html> 

Sólo una prueba básica para una forma. Ahora lo he probado en el último Ubuntu Firefox (3.6.7), Opera (10.60 Internal) y el último Linux Chrome Beta de Google (5.0.375.99 beta). Ninguno de ellos parece enviar el método de envío adecuado al servidor, cuando envío el formulario. Ahora, creo (no a partir de ninguna investigación específica) que Firefox todavía tiene que admitir esto, y que al igual que muchos HTML5, está programado para la próxima versión de FF. Opera no lo sé, pero a menudo escucho que sigue el ritmo de Chrome. Entonces ... sí, estoy un poco confundido.

Al enviar el formulario, van a la url: http://localhost:8080/some_resource?title=t&body=b&submit=Submit&template=resource.html. Tenga en cuenta que, como se esperaba, POST funciona bien.

¿Alguien tiene alguna sugerencia para que funcione el método put? Podría ser posible que la versión beta de Linux simplemente no se haya actualizado a la de la variedad Windows (algo asumo, es de lo que la gente estaba hablando cuando vi PUT trabajando para Chrome), pero realmente lo espero es un problema con mi implementación.

¿Los servidores tienen que admitir PUT/DELETE? (Estoy usando AppEngine Dev Server actualmente). No sé .. espero que alguien tiene algunas ideas :)

, gracias a las respuestas, Lee

Nota: Otras características de HTML5 que he probado hasta ahora están trabajando. Por ejemplo, en esa forma puedes ver el enfoque automático y los atributos requeridos. Esos funcionan como estaba previsto en Chrome.

Edit1: Solo para aclarar, entiendo que el soporte para estos es incompleto. Como respondí antes a una respuesta, no me importa el soporte actual en otros navegadores. Actualmente, Chrome es lo que quiero trabajar, y espero que Firefox funcione en el próximo lanzamiento (no sé, simplemente los escucho empujar mucho a HTML5), y no tengo ni idea sobre Opera.

Todo esto es simplemente para probar y aprender el nuevo y maravilloso mundo de HTML5 (Web Workers, localStorage, etc.) y CSS3. Solo me preocupan los navegadores de última generación, que coinciden con la tecnología de punta: :)

+4

'PUT' y' DELETE' no tiene nada que ver con HTML5; se definen en la especificación HTTP/1.1. El soporte debe estar presente tanto en el lado del cliente (para enviar) como del servidor (para manejarlo). – You

+0

Sí, y el uso, tal como lo permite HTML5, es algo que estoy muy entusiasmado. La pregunta es ... ¿por qué no funciona? /. Demonios, algunas personas dicen que actualmente se admiten un montón de atributos, pero ni siquiera puedo hacer funcionar PUT/DELETE. Argh –

+0

Hay un borrador para que los verbos sean compatibles oficialmente. No tengo ni idea de por qué tardó tanto, ya que PUT/DELETE ha sido parte de HTTP durante años. Consulte http://amundsen.com/examples/put-delete-forms/ para obtener más información. Hasta que se acepte ese borrador, los navegadores simplemente no enviarán nada más que OBTENER y PUBLICAR. –

Respuesta

23

PUT y DELETE son métodos ya no admitidos para el <form> etiqueta. Ver HTML5 differences from HTML4 (19 de octubre de 2010)

+4

Gracias por el aviso ... ¿Alguna idea de cómo se supone que se debe implementar REST, entonces? –

+8

El soporte PUT y DELETE se ha eliminado de la especificación HTML5 en términos de agregarlos como un valor al atributo "método"

, por ejemplo. . Pero PUT y DELETE están muy vivos y bien como parte del HTTP 1.1 especificación, lo que significa que un servidor todavía puede escucharlos (para llamadas REST), y creo que aún es posible obtener un navegador para enviar PUT y ELIMINAR a través de Ajax (ver http://stackoverflow.com/questions/165779/ are-the-put-delete-head-etc-methods-available-in-most-web-browsers) –

3

No hay "HTML5", como un estándar monolítico.

Algunas veces es lo mismo que HTML4. Algunas de sus características técnicas no estándar ratificantes que implementa cada navegador y que todos usan desde hace años. Algunas de sus nuevas extensiones coinciden en gran parte con los proveedores de los navegadores y se encuentran en diversas etapas de implementación. Como, por ejemplo, autofocus.

Pero algo de esto es algo implementado de manera imprevisible que probablemente cambie antes de que sea estandarizado, y algunas de sus características de bonificación aleatoria que algunas personas al azar de WHATWG pensaron que serían agradables, pero que no muestran signos de apoyo del autores del navegador.

Hay menos de esta última categoría que antes (los primeros borradores de WHATWG estaban casi tan llenos de maldad arquitectónica y astronómica como XHTML 2.0), pero todavía hay algunos, y actualmente, los tipos de envío de formularios extendidos (PUT/Los métodos DELETE y algunas de las acciones que no son HTTP están en esa categoría. Cada navegador actualmente ignora method="put", volviendo al valor attr predeterminado get en su lugar.

Tal vez los navegadores de un día implementarán esto. O tal vez será eliminado de la especificación. HTML5 aún está lejos de haber terminado. Por ahora, solo use POST como todos los demás. No es completamente RESTfulness, pero eso realmente no te da nada especial.

<input ... autofocus /> 

Use sintaxis HTML o XHTML, pero no las mezcle. autofocus="autofocus" para XHTML5, o para HTML5, pierde el cierre automático /.

<input id="submit" name="submit" type="submit" value="Submit" /> 

mejor evitar nombrar un botón que, para evitar choques con el método form.submit(). No necesita name en un botón de envío a menos que necesite comprobar si hace clic en un botón en particular, de todos modos. (Y no es necesario añadir id s a todos sus campos tampoco. A menos que necesite un id para <label for o focalización script, puede dejarlos fuera.)

+0

Entonces, ¿qué es exactamente lo que se dice sobre Chrome apoyando PUT/DELETE? Para decirlo sin rodeos, estoy usando estos en proyectos personales y para aprender las nuevas funciones HTML5 (trabajadores web, etc.), así que no me importa si dejo otros navegadores en el polvo. Esperaba con todas mis fuerzas que Chrome funcionara, Firefox no funcionó (hasta que se actualiza, lo que brinda más compatibilidad con HTML5) y ... quién sabe sobre Opera. IE, por supuesto, requeriría Chrome Frame. Simplemente quiero que los métodos funcionen según lo previsto ... ¿por qué hablar de Chrome apoyando PUT/DELETE? ¿Acabo de malinterpretarlos? –

+0

En cuanto al cierre (/>) y naming (enviar), es decir, desde una biblioteca de generador de formularios (WTForms de Python) y aún no he visto cómo cambiar las etiquetas de cierre. En cuanto a la denominación del botón de envío, es fácilmente modificable. De nuevo, esto es solo una prueba para que PUT funcione. Todo lo demás no importa :) –

+0

No he escuchado hablar así, pero sospecho que, como @You menciona, puede tratarse de 'XMLHttpRequest', que permite el envío de estos métodos excepto en algunos navegadores más antiguos. – bobince

Cuestiones relacionadas