2012-01-01 88 views
2

我有一個按鈕onclick="sendNews()"和一個PHP腳本,它可以完成數據庫工作。 問題是當sendNews運行時,$_POST陣列爲空。爲什麼ajax不能使用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 "با موفقیت ارسال شد"; 

?> 

在哪裏的問題?

+0

你的代碼乍看起來很好看,所以它更像是一個關於我們看不見/知道的事情的問題? 「params」的內容是什麼? '#title'和'#boddy'是什麼樣的元素?如果它們是表單元素,則可能需要'value'而不是'innerHTML'。 – 2012-01-01 00:31:17

+0

如果修改'sendnews.php'來將'$ _POST'內容轉儲到文件中,它仍然是空白的嗎? – sarnold 2012-01-01 00:32:52

+2

順便提一句,你正在請求一個名爲'boddy'的對象的'.innerHTML' - 是一個錯字還是故意的? – sarnold 2012-01-01 00:33:42

回答

-1

編輯糾正代碼中的錯誤並使其與更多瀏覽器兼容。 感謝@Mr。 BeatMasta和@Felix Kling讓我直接放置onreadystatechange,發送頭文件和瀏覽器兼容性問題。

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

在你的PHP你有:

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

這應該是:

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

「2)在打開和發送之前,您應該提供onreadystatechange函數。」你只是構造一個JS對象,所以你不必在打開之前指定onreadystatechange回調 – 2012-01-01 01:28:47

+0

ROFL xDDD你改變它不被理解,但是因爲你剛纔改正了它)))你明確地寫了「BEFORE OPEN」,而不是在「請求」之前:P – 2012-01-01 01:48:37

+0

我不認爲'FormData'在IE中可用。 – 2012-01-01 08:11:03

2

好理解了它。要發送POST請求使用AJAX你需要設置一個urlencoded標題,放在xmlhtt.open後面()

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

其他代碼部分是正確的,因爲我已經檢查過我自己的

+0

y,我看到你的回答,你的第二點是完全錯誤的 – 2012-01-01 01:27:12

+0

不清晰!你只是糾正它作弊者) – 2012-01-01 01:49:03

-1

你爲什麼不試試jQuery?它會讓你的生活變得更輕鬆。

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