2012-01-01 3 views
2

J'ai un bouton avec onclick="sendNews()" et un script PHP qui fait fonctionner la base de données. Le problème est que le tableau $_POST est vide lorsque sendNews s'exécute.Pourquoi ajax ne fonctionne pas avec la méthode POST?

Javascript:

function sendNews() 
{ 
    var title=document.getElementById("title").innerHTML; 
    var body=document.getElementById("boddy").innerHTML; 
    var params="title="+title+"&body="+body; 
    var xmlhttp; 
    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    //Send the proper header information along with the request  
    xmlhttp.open("POST","sendnews.php",true); 
    xmlhttp.send(params); 
    xmlhttp.onreadystatechange=function(){ 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      document.getElementById("newsAddResult").innerHTML=xmlhttp.responseText; 
     }  
    } 
} 

PHP:

<?php 
include("../inc/functions.php"); 
if(!loginCheck()) 
    header('Location: index.php'); 

[email protected]$_POST['title']; 
[email protected]$_POST['body']; 
var_dump($_POST); 
$q=sprintf("insert into `news`(`id`,`title`,`body`,`time`) values(NULL,'%s','%s','%s')",$title,$body,jgmdate('l jS F Y h:i:s A')); 
mysql_query($q) or die("خطا".mysql_error()); 
echo "با موفقیت ارسال شد"; 

?> 

Où est le problème?

+0

Votre code a l'air correct à première vue, donc c'est plus une question sur les choses que nous ne voyons pas/ne savons pas? Quel est le contenu de 'params'? Quels types d'éléments sont '# title' et' # boddy'? Si ce sont des éléments de formulaire, vous voudrez probablement 'value' au lieu de' innerHTML'. –

+0

Si vous modifiez votre 'sendnews.php' pour vider le contenu' $ _POST' dans un fichier, est-il toujours vide? – sarnold

+2

Incidemment, vous demandez le '.innerHTML' d'un objet nommé' boddy' - est-ce une faute de frappe ou intentionnelle? – sarnold

Répondre

-1

Édité pour corriger les erreurs dans le code et pour le rendre compatible avec plus de navigateurs. Merci à @Mr. BeatMasta et @Felix Kling pour me mettre directement sur le placement de onreadystatechange, l'envoi de l'en-tête, et les problèmes de compatibilité du navigateur.

. Javascript:

function sendNews() 
{ 
    var title=document.getElementById("title").innerHTML; 
    var body=document.getElementById("boddy").innerHTML; 

    var params="title="+title+"&body="+body; 

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

    //Send the proper header information along with the request  
    xmlhttp.open("POST","sendnews.php",true); 

    xmlhttp.onreadystatechange=function(){ 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      document.getElementById("newsAddResult").innerHTML=xmlhttp.responseText; 
     }  
    } 

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

    xmlhttp.send(params); 
} 

Dans votre php vous avez:

[email protected]$_POST['title']; 
[email protected]$_POST['body']; 

Cela devrait être:

$title = $_POST['title']; 
$body = $_POST['body']; 
+0

"2) Vous devez fournir la fonction onreadystatechange avant d'ouvrir et d'envoyer." vous ne construisez qu'un objet JS, donc vous n'avez pas besoin de spécifier le callback onreadystatechange avant d'ouvrir –

+0

ROFL xDDD vous l'avez modifié pour ne pas être compris, mais parce que vous venez de le corriger))) vous avez clairement écrit "AVANT OUVERT", non avant le "REQUEST": P –

+0

Je ne pense pas 'FormData' est disponible dans IE. –

2

Ok figured it out .. Pour envoyer une requête POST en utilisant ajax vous devez définir un en-tête urlencoded, juste mettre après xmlhtt.open()

xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 

les autres parties de code sont correctes car j'ai vérifié moi-même

+0

yup, j'ai vu votre réponse, votre 2ème point est totalement faux –

+0

pas plus clair! Tu viens de le corriger. –

-1

Pourquoi n'essaies-tu pas jQuery? Cela va rendre votre vie beaucoup plus facile.

$('#your-send-button').click(function() { 
    $.post('sendnews.php', { 
     title: $('#title').html(), 
     body: $('#boddy').html() 
    }, function(data) { 
     $('#newsAddResult').html(data); 
    }); 
});