2010-11-25 14 views
15

J'essaye d'écrire une XMLHttpRequest en utilisant la méthode POST. J'ai réussi à utiliser XMLHttpRequest dans le passé en utilisant la méthode GET, mais je suis aux prises avec POST.AJAX XMLHttpRequest POST

Voici mon code:

var xmlhttp = null; 
if (window.XMLHttpRequest) 
{// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp = new XMLHttpRequest(); 
} 
else 
{// code for IE6, IE5 
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
} 

var url = "http://www.mysite.com/script.php"; 
var params = "var=1"; 
xmlhttp.open("POST", url, true); 
xmlhttp.send(params); 

Il appelle essentiellement un script PHP qui ajoute des informations à une base de données.

+0

Quelle est l'erreur que vous obtenez? –

+0

Il n'y a pas d'erreur, et selon Chrome Inspector le code est correct. – diggersworld

Répondre

-6

D'accord, je l'ai réussi à trier.

Odd raison cependant, pourrait être liée à la sécurité sandbox, mais plutôt que d'avoir l'adresse URL complète, je viens d'utiliser le chemin relatif au fichier, et maintenant cela fonctionne.

Merci à tous pour votre soutien.

49

Vous avez oublié de définir explicitement l'en-tête Content-type, ce qui est nécessaire lors des requêtes POST.

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 

Aussi, ne pas oublier d'utiliser encodeURIComponent pour encoder vos paramètres, par exemple:

var params = "var=" + encodeURIComponent("1"); 

(dans cet exemple particulier, il est pas nécessaire, mais lorsque vous utilisez des caractères spéciaux comme + choses iront horriblement mal si vous n'encodez pas le texte du paramètre).

Mise à jour - vous devez également remplacer toutes les instances de %20 avec +, comme

var params = params.replace(/%20/g, '+'); 
+0

J'ai essayé d'ajouter le type de contenu et l'encodage mais le script de traitement n'a toujours pas été appelé. – diggersworld

+0

@diggers: A quoi ressemble le script de traitement? Pouvez-vous modifier votre question pour inclure cela? –

+2

devrait être l'en-tête 'Content-Type' ici, pas' Content-type' ... –