2010-08-03 23 views
13

que tiene la siguiente función en un archivo .js en index.htmlJquery: Ejecución de AJAX localmente sin un servidor web

function getValues(){ 

$.ajax({ 
    type: 'POST', 
    url: "http://localhost/getData/getdata.php", 
    success: function(data){ 
    var dataValues; 
    var apnd; 

    dataValues = String(data.NSE); 
    apnd = "a"; 
    updateValues(dataValues, apnd); 

    dataValues = String(data.BSE); 
    apnd = "b"; 
    updateValues(dataValues, apnd); 
    }, 
    dataType: "json" 
}); 

} 

esto funciona bien cuando lo ejecuto en un servidor web como WAMP. Pero quiero ejecutar index.html localmente, es decir, sin un servidor web. El usuario simplemente hace doble clic en index.html y debería ejecutarse, pero no es así. los datos siempre son nulos ¿Cual podría ser el problema? Lo siento, soy un súper JQuery Noob.

el código en el archivo getdata.php es

<? 

echo json_encode(array("NSE"=>rand(5000, 20000),"BSE"=>rand(5000, 20000))); 

?> 
+1

Por favor, aclare una cosa, ¿todavía está publicando (realizando la llamada AJAX) en un servidor web a pesar de que está ejecutando la página web sin un servidor web? –

+1

Sugiero que use 'php -S localhost: 80' para iniciar un servidor web simple. – ahui

Respuesta

3

No se puede hacer eso, usted debe abrir su archivo html también de dirección de servidor web por ejemplo http://localhost/yoursite/file.html o incluso URL del servidor remoto. Necesitas pasar por la URL del servidor/servidor.

7

AJAX necesita un servidor web para comunicarse para que pueda recuperar cualquier dato; de lo contrario, es solo hablar con una pared. Ejecutar el script sin un servidor web es como intentar hacer una llamada sin servicio celular. : D

6

El servidor web es exactamente lo que maneja todos los detalles para usted.

No se puede PUBLICAR sin un servidor web para publicar en. HTTP = protocolo web, por lo que no puede tener una URL HTTP sin un servidor web para orientar.

El servidor web es también el proceso que toma su solicitud de una página PHP y ejecuta el intérprete PHP, administrando las entradas y salidas.

¿Por qué desea ejecutarlo localmente?

+2

Creo que está ejecutando la página web localmente, (a través de C: \ ... \ index.html) pero todavía está haciendo la solicitud al servidor web (con php). Creo que es un problema de secuencias de comandos entre sitios (ver mi respuesta), no un problema de análisis. –

+0

sí exactamente como dice Bob – Steven

3

Lea el SOP. El acceso a los datos de un dominio que no sea el actual está bloqueado por razones de seguridad.

+4

No creo que esto sea relevante para su problema. –

15

Cuando ejecuta su index.html desde un archivo, el AJAX funciona. Pero el problema ocurre porque está viendo el archivo en la dirección "file: //....../index.html" y está realizando una solicitud AJAX al "http://localhost/..../something.php", que NO ESTÁ PERMITIDO debido a la creación de scripts entre sitios. Todas las solicitudes AJAX deben ir al mismo dominio/servidor.

Supongamos que está viendo el archivo haciendo doble clic en él y sigue haciendo la solicitud de AJAX al servidor web.

+0

No sabía esto. gracias – Steven

+0

Además, no funcionaría incluso si la URL era relativa, de lo contrario, un sitio web que se ejecuta en un CD tendría acceso a todo el sistema de archivos. –

5

Ajax no funciona sobre el archivo: // protocolo mencionado por otros. Tal vez usted quiere algo así como http://www.appcelerator.com/ para crear aplicaciones de escritorio con html/js/css

3

estoy cosquillas rosa con el mismo porque la lectura de las respuestas de personas publican acerca de cómo no se puede hacer AJAX "local" sin un let servidor Web a la solución de cómo puedes hacerlo. Con JavaScript, los métodos del objeto XMLHttpRequest() son en su mayoría producidos por el navegador y debe omitir el producido por el servidor web (xmlhttp.status == 200). Los siguientes trabajos:

<script> 
window.onload = function() { 

    var input = document.getElementById("input"); 

    input.onclick = function() { 
     var xmlhttp; 
     xmlhttp = new XMLHttpRequest(); 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4) { 
       document.getElementById("response").innerHTML = xmlhttp.responseText; 
      } 
     } 
     xmlhttp.open("GET", "response.html", true); 
     xmlhttp.send(); 
    } 
} 
</script> 
</head> 

<body> 
<h3>AJAX Request/Response</h3> 
<p></p> 
<input id="input" type="button" value="Call AJAX" /> 
<p></p> 
<div id="response"></div> 
+2

Esto ya no es así en las últimas versiones de Chrome (error: "Las solicitudes cruzadas de origen solo son compatibles con esquemas de protocolo: http, data, chrome-extension, https, chrome-extension-resource.") Y Firefox (error: " Acceso a URI restringido "). – adelphus

Cuestiones relacionadas