2011-01-22 16 views
31

¿Por qué Javascript trata las URL relativas de forma diferente que el HTML estándar? Piense en la siguiente URL (o simplemente navegue hasta ella): http://en.wikipedia.org/wiki/Rome. Abra una consola de Firebug (u otra consola de Javascript) e introduzca el siguiente:URL relativas en solicitudes AJAX

var x = new XMLHttpRequest(); 
x.open("GET", "foo", true); 
x.send("bar"); 

En mi sistema la solicitud se envía a "http://en.wikipedia.org/wiki/foo". La "Roma" en la URL simplemente se ignora. La misma solicitud con una barra inclinada en la URL ("http://en.wikipedia.org/wiki/Rome/") agrega el "foo" a la URL completa.

Esto parece dificultar la codificación de las URL correctas en Javascript. ¿Hay alguna biblioteca de Javascript que ayude a solucionar este problema?

(pedí una similar question antes, pero más jQuery específica, donde esto también ocurre. Espero tener una mejor respuesta a esta cuestión independiente de algo más de la biblioteca.)

+0

@Zardoz Se puede publicar el enlace a esa otra pregunta similar? –

+0

Por supuesto ... También edité el texto con un enlace a esa pregunta: http://stackoverflow.com/questions/4754559/relative-url-does-not-get-resolved-correctly-by-jquery – Zardoz

+2

@Zardoz Los enlaces funcionan de la misma manera. Si la URL de la página es hxxp: //en.wikipedia.org/wiki/Rome y en la página está este ancla: '', luego al hacer clic en el enlace se abrirá esta URL: hxxp: // en.wikipedia.org/wiki/foo –

Respuesta

51
+2

Para referencia, vea el paso 6 en la sección 4 de [RFC 1808] (http://www.ietf.org/rfc/rfc1808.txt) – Cameron

+0

@Cameron : ¡Excelente! Lo agregué a la respuesta – some

0

Parece que http://code.google.com/p/js-uri/ es la biblioteca de elección para la manipulación de URL en general, y este tipo de computación-absoluta-a en relación en particular:

new URI(potentiallyRelativeLink).resolve(new URI(window.location.href)).toString()