2014-12-04 36 views
0

我的項目是從用戶處獲取輸入並使用ajax和php將其寫入JSON格式文本文件的末尾。問題在於php只會將時間和日期寫入文件的末尾,而沒有其他內容。我從之前的帖子中拿出了這個例子,並將其修改爲我的目的。這裏的HTML movie.html:嘗試使用Ajax和PHP將JSON數據寫入到txt文件

<html lang="en"> 
    <head> 
     <meta charset="utf-8"/> 
     <script src="movie.js" type="text/javascript"></script> 
    </head> 

    <body> 
     <h1> 
      <center> 
       <input id="box" type="textbox"name="box" value="Enter Movie:"/> 
       <input id="add" type="button" value="Submit" onClick="addStuff();" /></center> 
     </h1> 
     <div id="status" ></div> 

     <h2>MOVIE NAME:</h2> 

     <ul id="list" name="list"> 
      </ul> 
     <div id="status"></div> 
    </body> 
</html> 

這裏的其中通過Ajax發送數據的movie.js文件:

function addStuff(){ 
var movie_name_entered = document.getElementById("box").value; 
var movieList = document.getElementById("list"); 

var hr= new XMLHttpRequest(); 
var url= "movie.php"; 
hr.open("POST",url,true); 
hr.setRequestHeader("Context-type","application/x-www-form-urlencoded"); 
var param = "film=" + movie_name_entered; 
hr.setRequestHeader("Content-length", param.length); 
hr.setRequestHeader("Connection", "close"); 
hr.onreadystatechange= function(){ 
    if(hr.readyState==4 && hr.status==200){ 
     var return_data=hr.responseText; 
     console.log(hr.responseText); 
     document.getElementById("status").innerHTML=return_data; 
    } 
} 
hr.send(param); 
document.getElementById("status").innerHTML = "processing..."; 
} 

這裏的PHP(順便說一句,我console.logged數據被髮送到PHP的,這是正確的):

<?php 
if($_POST){ 
$data = $_POST["film"]; 
$file ='movie.txt'; 
$fp = fopen($file, "a"); 
$encoded = json_encode($data); 
fwrite($fp, $encoded); 
fclose($fp);  
return $encoded;} 
?> 

如上所述,代碼只有更不管我做什麼,寫的時間和日期的文本文件,並沒有什麼。我測試了正在發送的數據以及它的有效$ _POST數據。我不知道要如何繼續。任何helop將不勝感激。謝謝!

+0

是的,我確定。該文本文件被稱爲movie.txt並在php文件中被引用。它與其他3個文件位於同一目錄中,並且是唯一被php更新的文件。我認爲時間/日期戳可能表明交換髮生的時間而不是實際數據。 – Khthulhu 2014-12-04 20:58:37

+0

好吧,事實證明,每當我測試應用程序時,我的桌面上都會打開文本文件,我用Ctl + f5來刷新它。該操作將日期/時間粘貼到空的(似乎是)文本文件中。我嘗試了下面列出的代碼,並做了相同的結果。然後我嘗試下面的代碼並關閉文本文件並重新打開它,然後瞧,它工作。 – Khthulhu 2014-12-05 02:05:18

回答

1

嘗試movie.js這個代碼

function addStuff() { 
    var movie_name_entered = document.getElementById("box").value; 
    var movieList = document.getElementById("list"); 

    var hr = new XMLHttpRequest(); 
    var url = "movie.php"; 
    hr.open("POST", url, true); 
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    var param = "film=" + movie_name_entered; 
    hr.setRequestHeader("Content-length", param.length); 
    hr.setRequestHeader("Connection", "close"); 
    hr.onreadystatechange = function() { 
     if (hr.readyState == 4 && hr.status == 200) { 
      var return_data = hr.responseText; 
      console.log(hr.responseText); 
      document.getElementById("status").innerHTML = return_data; 
     } 
    } 
    hr.send(param); 
    document.getElementById("status").innerHTML = "processing..."; 
} 

請改變你的PHP代碼低於

if ($_POST) { 
    $data = $_POST["film"]; 
    $file = 'movie.txt'; 
    $fp  = fopen($file, "a+"); 
    $encoded = json_encode($data); 
    fwrite($fp, $encoded); 
    fclose($fp); 
    exit(); 
} 
+0

我試過你的代碼。結果沒有改變。 – Khthulhu 2014-12-04 21:00:35

+0

我試過你的代碼。有用!那麼,它有點作品。它會向文件寫入正確的數據,但是,一旦寫入數據,它就不會再獲取數據並將其重新拉回到頁面中。我懷疑我將不得不編寫一個單獨的函數來做到這一點。謝謝 :-) – Khthulhu 2014-12-04 21:55:18

0

你得到一個空的$_POST變量,所以你的PHP代碼永遠不會被執行。你必須在你的代碼的錯誤:

hr.setRequestHeader("Context-type","application/x-www-form-urlencoded"); 

應該Content-type,與c替換x:d

+0

沒有,它沒有改變結果。 – Khthulhu 2014-12-04 20:59:55