2009-11-27 5 views
3

lorsque je fais une requête AJAX avec ce code, il retourne le statut à 0. Qu'est-ce que j'ai fait de mal? En outre, ce code est uniquement conçu pour fonctionner dans Firefox pour diverses raisons.Le statut de demande AJAX renvoie 0

var ajax; 

function connectToOtherServer(server,port,userid,password){ 

ajax=new XMLHttpRequest(); 
ajax.onreadystatechange=validateConnection; 

params='userid='+encodeURIComponent(userid)+'&password='+encodeURIComponent(password); 

alert('http://'+server+':'+port+'/ok.txt'); 

ajax.open('POST','http://'+server+':'+port+'/ok.txt',true); 

ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
ajax.setRequestHeader("Content-length",params.length); 
ajax.setRequestHeader("Connection","close"); 

ajax.send(params); 

} 

function validateConnection(){ 
if(ajax.readyState===4){ 
if(ajax.status===200){ 

alert(ajax.responseText); 

}else{ 
alert(ajax.status); 
} 
} 
} 

Répondre

3

Si vous essayez de vous connecter à un autre serveur, le same origin policy cesserez-vous:

Le terme « origine » est définie en utilisant le nom de domaine , la couche d'application de protocole, et (dans la plupart navigateurs) TCP port du document HTML exécutant le script . Deux ressources sont considérées comme ayant la même origine si et seulement si toutes ces valeurs sont exactement identiques à .

+0

hein? comme, je peux seulement utiliser ajax pour se connecter à la même URL que la page que je suis? –

+0

Non, même serveur/port: voir http://en.wikipedia.org/wiki/Same_origin_policy – Jerome

+0

ok, y at-il de toute façon je peux contourner ce problème? –

1

jquery.com Vous ne pouvez vous connecter à un autre serveur que si vous utilisez JSONP et un rappel. L'autre serveur devra prendre en charge le mécanisme JSONP/callback. Cette méthode implique la création d'une nouvelle balise de script, puis le serveur distant renvoie le code de rappel dans cette balise de script. Regardez le code source jQuery (ou utilisez-le simplement) pour voir qu'il gère JSONP.

L'idée de base est de créer une étiquette de script avec la source comme URL distante. La méthode distante renvoie un "script" contenant un appel de fonction en utilisant le rappel et les données JSON résultantes.

0

J'ai récemment rencontré ce problème. J'utilise AJAX pour soumettre des résultats de formulaire afin que les éléments de page puissent être mis à jour automatiquement. Mes appels de domaine étaient corrects. SELECT instructions sur la base de données fonctionnerait, mais INSERT, UPDATE, et DELETE ne serait pas.

Les alertes montrant la progression à travers le javascript indiquaient que l'appel fonctionnait correctement, mais ne le ferait jamais dans la partie php du processus. La réponse simple était que l'élément onsubmit du formulaire devait inclure return false;. Après avoir ajouté cela, les choses se sont bien déroulées.

<form name="form" action="" method="post" onsubmit="ProcessRequest(this);return false;"> 

Espérons que cela aide.