2013-01-07 53 views
1

我一直在試圖爲我的網站創建一個簡單的下載計數器,方法如下:使用jquery檢索表示下載時間的txt值,然後使用jquery調用ajax來執行一個PHP文件,該文件將覆蓋這樣的txt文件(在php文件中增加它)然後存儲它,然後用jquery讀取值。之前,我忘了,並避免任何誤傳,這裏是頁面的整個HTML代碼:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
    <head> 
    <title>GreenDream: SMS Sender</title> 
    <link rel=StyleSheet type="text/css" href="http://www.gfcf14greendream.com/CSS/greendream.css" /> 
    <link rel="SHORTCUT ICON" href="http://www.gfcf14greendream.com/images/dreamicon.ico"> 

    <script type="text/javascript" src="http://www.gfcf14greendream.com/JS/greendream.js"></script> 
    </head> 
<body onload="startTime(); handleTextFile()"> 
    <div id="background"> 
    <img src="http://www.gfcf14greendream.com/images/greentwi.png" class="stretch" alt="" /> 
    </div> 

    <br /> 

    <table align="center"> 

    <tr> 
     <td> 
      <a href="http://www.gfcf14greendream.com/"><img src="http://www.gfcf14greendream.com/images/dream.png" align="middle"></a> 
     </td> 

     <td> 
      <div id='pbutton' style="width:113px; height:41px; margin:0px;white-space:nowrap; word-spacing:0;"><a class="button" href="http://www.gfcf14greendream.com/programs.html">Programs</a></div> 
     </td> 

     <td> 
      <div id='gbutton' style="width:93px; height: 41px; margin:0px;white-space:nowrap; word-spacing:0;"><a class="button" href="http://www.gfcf14greendream.com/games.html">Games</a></div> 
     </td> 

     <td> 
      <div id='tbutton' style="width:108px; height: 41px; margin:0px;white-space:nowrap; word-spacing:0;"><a class="button" href="http://www.gfcf14greendream.com/tutorials.html">Tutorials</a></div> 
     </td> 

     <td> 
      <div id='bbutton' style="width:74px; height: 41px; margin:0px;white-space:nowrap; word-spacing:0;"><a class="button" href="http://blog.gfcf14greendream.com/">Blog</a></div> 
     </td> 

     <td> 
      <div id='mbutton' style="width:114px; height: 41px; margin:0px;white-space:nowrap; word-spacing:0;"><a class="button" href="http://www.gfcf14greendream.com/aboutme.html">About Me</a></div>       
     </td> 

     <td style="padding-left:50px"> 
      <div id='daytitle'></div> 
      <div id='clock'></div> 
     </td> 
    </tr> 

    </table> 

    <br /> 

    <div style="text-align: center; color:#00FF00; font-size: 20px">The following is a Visual C++ program that was designed specifically to send text messages to a phone... Free of charge!!</div> 
    <br /> 
    <div style="text-align: center; color:#FFFF00; font-size: 20px">THE GOOD: If you have a prepaid phone, then you can send text messages to a phone without wasting your minutes...</div> 
    <br /> 
    <div style="text-align: center; color:#FF8000; font-size: 20px">THE BAD : Since I haven't been able to put a Skype or Google Voice library for use with C++, this application depends on using what's known as an SMS gateway, different for every phone carrier... meaning you must know your recipient's carrier to be able to send a message!</div> 
    <br /> 
    <div style="text-align: center; color:#FF0000; font-size: 20px">THE UGLY: This program doesn't work on computers connected to safe networks (such as college/university networks) ... at least not yet!</div> 
    <br /> 
    <div style="text-align: center; color:#00FF00; font-size: 20px">You will probably need the Visual C++ Redistributable Package (or the .NET framework or both, but most likely just the package) to run this program, if you don't have it installed on your pc yet</div> 
    <br /> 
    <br /> 
    <div style="text-align: center; color:#0000C8; font-size: 20px">Click <a href="http://www.microsoft.com/en-us/download/details.aspx?id=5555">here</a> to download the Visual C++ Redistributable Package</div> 
    <div style="text-align: center; color:#0000C8; font-size: 20px">Click <a href="http://www.microsoft.com/en-us/download/details.aspx?id=17851">here</a> to download the .NET Framework 4</div> 
    <br /> 
    <br /> 

    <div style="text-align: center; color:#00FF00; font-size: 20px"><a class="button" id="downbutton" style="width:115px;margin:0px;white-space:nowrap; word-spacing:0;" href="http://www.gfcf14greendream.com/Programs/SMSSender/SMS Sender.exe">Click here to download SMS Sender</a></div> 
    <br /> 
    <div id='counter' style="text-align: center;"></div> 

    <br /> 

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
    <script type="text/javascript"> 

    function handleTextFile() 
    { 
     document.getElementById('counter').style.color = "rgb(0, 255, 0)"; 
     document.getElementById('counter').style.fontWeight = 'bold'; 

     var downcounter = 0; 

     $.get("http://www.gfcf14greendream.com/counters/smssender.txt", function(data){ 
      downcounter = data; 
      if (downcounter == 1) $("#counter").text("SMS Sender has been downloaded " + downcounter + " time..."); 
      else $("#counter").text("SMS Sender has been downloaded " + downcounter + " times..."); 
     }); 

     $("#downbutton").click(function(){  

      $.get("http://www.gfcf14greendream.com/PHP/smssender.php", function(data){ 
       $.get("http://www.gfcf14greendream.com/counters/smssender.txt", function(data){ 
        downcounter = data; 
        if (downcounter == 1) $("#counter").text("SMS Sender has been downloaded " + downcounter + " time..."); 
        else $("#counter").text("SMS Sender has been downloaded " + downcounter + " times..."); 
       });    
      }); 
     }); 

    } 

    </script> 

</body> 
</html> 

在運行頁面,我用這個代碼(從上面一張)來讀取一個txt文件,並獲得下載算(這個工程):

var downcounter = 0; 

     $.get("http://www.gfcf14greendream.com/counters/smssender.txt", function(data){ 
      downcounter = data; 
      if (downcounter == 1) $("#counter").text("SMS Sender has been downloaded " + downcounter + " time..."); 
      else $("#counter").text("SMS Sender has been downloaded " + downcounter + " times..."); 
     }); 

然後點擊downbutton變量時,此代碼應執行:

$("#downbutton").click(function(){  

      $.get("http://www.gfcf14greendream.com/PHP/smssender.php", function(data){ 
       $.get("http://www.gfcf14greendream.com/counters/smssender.txt", function(data){ 
        downcounter = data; 
        if (downcounter == 1) $("#counter").text("SMS Sender has been downloaded " + downcounter + " time..."); 
        else $("#counter").text("SMS Sender has been downloaded " + downcounter + " times..."); 
       });    
      }); 
     }); 

,這應該閱讀的PHP文件,其代碼爲:

<?php 
    $counter = intval(file_get_contents('/homepages/37/d434704165/htdocs/counters/smssender.txt')); 
    $counter++; 
    file_put_contents('/homepages/37/d434704165/htdocs/counters/smssender.txt', $counter); 
?> 

和運行PHP將覆蓋txt文件「smssender」,從而增加下載的數量。我注意到在我的網站上手動輸入php文件的地址實際上起作用,並且發生下載增量。然而,當JQuery執行代碼時,不會發生增量。我猜這是在這條線上,但這裏的錯誤是什麼? :

$.get("http://www.gfcf14greendream.com/counters/smssender.txt", function(data){ 

非常感謝您的任何幫助或建議!

回答

1

我認爲使用PHP頁面本身會簡單很多。您可以使用GET變量來確定是否需要增加下載計數器。舉例來說,做這樣的事情在你的PHP文件:

<?php 
$total = (int)file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/counters/smssender.txt'); 

if (isset($_GET['i'])) { 
    $total++; 
    // now update the file for future use 
    file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/counters/smssender.txt', $total); 
} 

echo $total; 
?> 

然後你就可以在AJAX本身調用PHP頁面,這樣你就不必擔心被同時並導致錯誤執行兩個通話。當您想要檢索當前的下載次數時,您現在可以撥打「smssender.php」。另外,當您想要檢索當前的下載次數並增加文件內容時,您可以調用「smssender.php?i」。

如果您只想增加文件的內容而不回顯輸出,您可以添加另一個if語句,但我不知道這是否是您要做的。如果是這樣,請讓我知道,我也可以向你展示代碼。我希望這有助於,如果沒有,請讓我知道。

更新:只是你的代碼改成這樣:

JavaScript文件:

$.get("/PHP/smssender.php", function(data) { 
    $("#counter").text(data);    
}); 

$("#downbutton").click(function() {  
    $.get("/PHP/smssender.php?i", function(data) { 
     $("#counter").text(data);    
    }); 
}); 

PHP文件:

<?php 
$total = (int)file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/counters/smssender.txt'); 

if (isset($_GET['i'])) { 
    $total++; 
    // now update the file for future use 
    file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/counters/smssender.txt', $total); 
} 

$suffix = ($total == 1) ? 'time' : 'times'; 

echo 'SMS Sender has been downloaded ' . $total . ' ' . $suffix . '...'; 
?> 

現在,你可以通過很多簡化你的Javascript/jQuery的。此代碼與您的代碼具有完全相同的行爲,沒有任何錯誤。現在,我將解釋我所做的更改。首先,您只需使用$ .get()方法調用單個PHP文件,而不管您是隻檢索當前的下載數量還是增加總數。

其次,文本處理在PHP文件中完成。您不再確定它是否已經在Javascript中下載了1次或更多次,而是由PHP文件處理,因爲它比檢索數據並在之後進行計算要快得多。

最後,我讓下載按鈕只調用一次$ .get(),這樣您就不必擔心因試圖同時檢索兩個不同的頁面而導致的錯誤。嘗試用我上面發佈的新代碼替換您的代碼,並讓我知道它是如何爲您解決的。

+0

我不知道我明白(抱歉,但這個文件寫作是我第一次嘗試使用PHP)。你的意思是試圖將我所有的$ .get()合併爲''.ajax()'來調用php頁面嗎? – gfcf14

+0

我更新了我的代碼。請使用我在「更新」後發佈的代碼。 – SISYN

+0

謝謝你的代碼。我討厭成爲一個麻煩,但是當第一個$ .get工作時,第二個(php有?的那個)沒有。我在$ .get(... php?i「)行前寫了一個'alert(」下載「)',並且它從未出現過,所以錯誤仍然在$ get來覆蓋:'$ .get (「/PHP/smssender.php?i」,函數(數據){'但我沒有得到一個錯誤,而手動去php或php嗎?我 – gfcf14

相關問題