2010-06-04 3 views
0

Ce bloc de code est pour client.html (il se trouve dans ce site www.client.com/client.html) - côté client.Puis-je utiliser ce script Ajax pour communiquer et échanger des données entre le client et le serveur?

Le j'ai le code ci-dessous qui ressemble à ceci:

ajaxRequest.open("GET", "http://www.server.com/ajax.php", true); 

Voilà comment j'appelle le fichier ajax.php situé dans le serveur. Malheureusement, je n'ai pas de chance du tout. Il ne peut pas se connecter au serveur que j'appelle. BTW, le site ips/test que j'ai utilisé ne sont pas des restrictions, et est accessible à tous.

Cependant, j'ai essayé de simuler en mettant à la fois client.html et ajax.php dans le même site et cela fonctionne bien.

Donc, ma question est ce que ce script ne fonctionne que si vous êtes dans le même site? ou ça marche aussi dans le scénario client-serveur? Que dois-je faire d'autre pour faire ce travail?

//client.html

<script language="javascript" type="text/javascript"> 
<!-- 
//Browser Support Code 
function ajaxFunction(){ 
    var ajaxRequest; // The variable that makes Ajax possible! 

    try{ 
     // Opera 8.0+, Firefox, Safari 
     ajaxRequest = new XMLHttpRequest(); 
    } catch (e){ 
     // Internet Explorer Browsers 
     try{ 
      ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try{ 
       ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e){ 
       // Something went wrong 
       alert("Your browser broke!"); 
       return false; 
      } 
     } 
    } 
    // Create a function that will receive data sent from the server 
    ajaxRequest.onreadystatechange = function(){ 
     if(ajaxRequest.readyState == 4){ 
      document.myForm.time.value = ajaxRequest.responseText; 
     } 
    } 
    ajaxRequest.open("GET", "http://www.server.com/ajax.php", true); 
    ajaxRequest.send(null); 
} 

//--> 
</script> 



<form name='myForm'> 
Name: <input type='text' onChange="ajaxFunction();" name='username' /> <br /> 
Time: <input type='text' name='time' /> 
</form> 
</body> 
</html> 

// ajax.php

<?php 

    echo date("H:i:s"); 

    ?> 

Répondre

0

navigateur suivre les same origin policy pour des raisons de sécurité. Vous ne serez donc pas en mesure de faire une requête AJAX vers un domaine différent.

Si vous avez le contrôle sur le serveur, vous pouvez envoyer special headers qui permet AJAX inter-domaine. Sinon, je pense que vous devez trouver des méthodes différentes.

Une autre chose que vous pouvez faire est d'ajouter un script à votre page, dont la source réside sur www.server.com. Ensuite, dans la source, vous pouvez transmettre des données, par exemple en les affectant à une nouvelle variable. De cette manière, vous n'êtes pas limité par des restrictions inter-domaines, mais vous ne pourrez faire qu'une requête GET (pas POST, PUT, DELETE ...). De plus, il doit y avoir une certaine collaboration du serveur. Contrairement aux requêtes AJAX, le serveur ne crachera aucune page, mais doit afficher un javascript valide.

Habituellement, le serveur encode réellement les données en JSON, et il passe à une fonction donnée, de sorte que la réponse peut ressembler à

someCallback({foo: 'bar', bar: 'foo'}); 

Ce techique est appelé JSONP, et vous pouvez trouver plus de détails here.

Questions connexes