2012-01-01 3 views
2

onclick="sendNews()" 버튼이 있고 데이터베이스 작업을 수행하는 PHP 스크립트가 있습니다. sendNews이 실행될 때 $_POST 배열이 비어있는 것이 문제입니다.POST 메서드에서 ajax가 작동하지 않는 이유는 무엇입니까?

자바 스크립트 :

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 "با موفقیت ارسال شد"; 

?> 

문제입니까?

+0

코드가 눈에 띄게 보이므로 보이지 않는 것에 대해 더 궁금한 점이 있습니까? 'params'의 내용은 무엇입니까? 어떤 종류의 요소가'# title'과'# boddy'입니까? 폼 요소라면'innerHTML' 대신에'value'를 원할 것입니다. –

+0

'sendnews.php'를 수정하여'$ _POST' 내용을 파일에 덤프하면 여전히 공백입니까? – sarnold

+2

덧붙여 말하자면, 'boddy'라는 객체의'.innerHTML'을 요구하고 있습니다. 오타이거나 의도적입니까? – sarnold

답변

-1

코드의 오류를 수정하고 더 많은 브라우저와 호환되도록 편집되었습니다. 덕분에 @ Mr. BeatMasta와 @Felix Kling은 onreadystatechange의 배치, 헤더 전송 및 브라우저 호환성 문제에 대해 바로 알려줍니다.

. 자바 스크립트 : 당신의 PHP에서

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); 
} 

당신은 :

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

가되어야한다 :

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

"2) open 및 send 전에 onreadystatechange 함수를 제공해야합니다." 당신은 단지 JS 객체를 구성하고 있으므로, 열기 전에 –

+0

ROFL xDDD를 변경하기 전에 onreadystatechange 콜백을 지정할 필요가 없습니다. 이해가되지 않도록 변경했지만 방금 수정했기 때문에)) "BEFORE OPEN"을 분명히 썼습니다. "요청"전에 : P –

+0

IE에서 'FormData'를 사용할 수 없다고 생각합니다. –

2

확인을 파악 .. 당신이 필요 POST 요청을 사용하여 AJAX를 보내려면 xmlhtt.open() 뒤에 붙이는 urlencoded 헤더를 설정하십시오.

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

다른 코드 부분이 맞습니다. 내 자신을 확인한 것과 같습니다.

+0

네, 네 대답이 완전히 틀렸다는 것을 알았다. –

+0

명확하지 않다! u 그냥 치터 교정) –

-1

jQuery을 사용해 보시지 않겠습니까? 너의 인생을 훨씬 편하게 해줄거야.

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