2013-02-03 76 views
1

我正在創建一個將數據發佈到MySQL的簡單表單。你的思維爲什麼是POST而不是GET?以及這個表單中有一個允許多個字符的描述字段,並且假定GET有其字符限制,我選擇使用POST。PHP/Javascript - 通過POST將日期字符串傳遞給AJAX不起作用

沒有進一步的介紹,下面是我的HTML表單。

<form name="addExperienceForm" id="addExperienceForm" style="display:none;"> 
        Title:<input type="text" name="title" id="title" /> 
        From:<input type="text" name="startDate" id="startDate" /> 
        To:<input type="text" name="endDate" id="endDate" /> 
        Description:<textarea type="message" name="description" id="description"></textarea> 
        <input type="button" value="Submit" onclick="addUserExp()"/> 
</form> 

這裏是在表單中的日期框jQuery的日期選擇器代碼:

//allow a date range to be selected 
     $("#startDate").datepicker({ 
        changeMonth : true, 
        changeYear : true, 
        dateFormat : "M,yy", 
     }) 
     $("#endDate").datepicker({ 
        changeMonth : true, 
        changeYear : true, 
        dateFormat : "M,yy", 
     }) 

這是AJAX的函數調用:

function addUserExp(){ 
     var title = document.getElementById('title').value; 
     var startDate = document.getElementById('startDate').value; 
     var endDate = document.getElementById('endDate').value; 
     var description = document.getElementById('description').value; 
     var str = "title="+title+"start="+startDate+"end="+endDate+"desc="+description; 
     var req = getXMLHTTP(); 

     if(req){ 

      req.onreadystatechange = function(){ 
       if (req.readyState == 4) { 
        // only if "OK" 
        if (req.status == 200) {       
         document.getElementById('addNewExp').innerHTML=req.responseText;  


        } else { 
         alert("There was a problem while using XMLHTTP:\n" + req.statusText); 
        } 
       } 
      } 
     } 
     req.open("post", "addExperience.php", true); 
     req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
     req.send(str); 
    } 

我懷疑問題出在AJAX調用,可能與我的'str'變量有關。

回答

1

我沒有測試你的代碼,但不應該是STR:

var str = "title="+title+"&start="+startDate+"&end="+endDate+"&desc="+description; 
-1

這將是很容易使用jQuery來處理Ajax請求:

function addUserExp(){ 
     var title = document.getElementById('title').value; 
     var startDate = document.getElementById('startDate').value; 
     var endDate = document.getElementById('endDate').value; 
     var description = document.getElementById('description').value; 
     $.post("addExperience.php", { "title": title, "start": startDate, "end": endDate, "desc":description }) 
     .done(function(data) { 
      document.getElementById('addNewExp').innerHTML=data; 
     }) 
     .fail(function() { 
      alert("There was a problem with request."); 
     });   
    } 

你可以閱讀更多大約$ .post here

+2

-1我認爲像你這樣的答案應該使用jQuery而不是普通的JS來**在這裏插入任何JavaScript任務**至少應該是不鼓勵的。普通的JS沒有錯。此外,這是一個意見,而不是解決方案,也不是對原始問題的診斷。 –

+0

@ gregory90 - 欣賞反饋,但這沒有奏效。雖然我同意jQuery會更容易使用,但同樣的問題仍然存在。標題和說明正在通過,但日期不是。 – massimorai

+0

@LimH。我從來沒有說過他應該使用jQuery。當然 - 普通的JS沒有錯。使用jQuery也沒有錯。這是可能的解決辦法,我認爲他可能對此感興趣。畢竟他已經在他的代碼中使用了一些jQuery。 massimorai我試過這個本地主機上的jQuery解決方案,並且工作得很好。所有數據都通過。 Jimzie解決方案也在起作用。看來你的php代碼中有一些錯誤。 – gregory90

0

經過無數小時的審查我的代碼後,我終於意識到我的PHP代碼是問題所在。

BEFORE:

<?php 


$title = $_POST['title']; 
$startDate = $_POST['startDate']; 
$endDate = $_POST['endDate']; 
$description = $_POST['desc']; 

echo $title; 
echo $startDate; 
echo $endDate; 
echo $description; 

?> 

和AFTER:

<?php 


$title = $_POST['title']; 
$startDate = $_POST['start']; 
$endDate = $_POST['end']; 
$description = $_POST['desc']; 

echo $title; 
echo $startDate; 
echo $endDate; 
echo $description; 

?> 

的通知後$變量並沒有反映我的JS字符串。

感謝所有的幫助。