2016-11-28 91 views
1

你將不得不原諒我的問題的天真。我非常熟悉使用PHP,HTML和CSS。不過,我正在爲一個小型項目編寫一個簡單的統計收集器。我傾倒了許多使用jQuery或Ajax的不同示例。我決定使用jQuery作爲我的第一個方法。目標是從getinfo.php文件中導入值,將它們分配給變量,然後將收集的信息發佈到數據庫中供以後分析。但是,我遇到了一些障礙..我使用$ .GET請求來拉這個PHP文件。

GETINFO.PHP

<?php 
$browserID = $_SERVER ['HTTP_USER_AGENT']; 
$ip = $_SERVER ['REMOTE_ADDR']; 
$url = $_SERVER ['REQUEST_URI']; 

echo $browserID; 
echo $ip; 
echo $url; 
?> 

相當直截了當我的例子,沒有什麼花哨無比。對於我的jQuery獲取和發佈請求,我寫了這個。

<script type="text/javascript"> 
     $(document).ready(function(){ 

      // Define variables to send 
      var pageTag = "Test Text"; 

      // Retrieve PHP variables 
      $.get("getinfo.php", function (data) { 

       alert("Data:" + data) 

       // Post data to database 
       $.post("process.php",{ 
         page: pageTag 

        }, 
        function (response,status){//required callback function 
         alert("*----Received Data----*\n\nResponse : " + response+"\n\nStatus : " + status); 
         //"response" receives - whatever written in echo of above PHP script. 

       }); 
      }); 
     }); 
    </script> 

正如你可以看到它是一團糟,是的,我是一個初學者,除了那個。無論如何,所以分開這兩個代碼工作正常。但是,當我嘗試將它們結合起來時,我沒有得到我需要的結果。實際發佈帖子時,我的var pageTag = "Test Text";甚至沒有被推送到服務器。現在我的PostgreSQL數據庫獲得空白條目保存時間戳,但是這是由process.php文件本身提交的。

PROCESS.PHP

<?php 
    #Creds to access the database 
    require_once("connection.php"); 

    /* Log page and get filenames */ 
    #$page = input($_GET['page']) or die('ERROR: Missing page ID'); 
    $page = json_decode(stripslashes($_POST['page'])); 
    $ip_add = json_decode(stripslashes($_POST['ip_addy'])); 
    $browser = json_decode(stripslashes($_POST['browser'])); 
    $timestampInSeconds = $_SERVER['REQUEST_TIME']; 
    $date = date("Y-m-d h:i:s", $timestampInSeconds); 

    $sql = "INSERT INTO stats (page, date, ip, browser) VALUES ('$page','$date','$ip_add','$browser')"; 
    pg_query($db,$sql); 

    echo $page; 
    echo $ip_add; 
    echo $date; 

    $query="SELECT COUNT(*) total FROM stats WHERE page= '$page'"; 
    $result = pg_query($db,$query); 
    $row = pg_fetch_array($result,0,PGSQL_NUM); 
    $count = $row[0]; 

    $query = "SELECT count(distinct IP) FROM stats WHERE page= '$page'"; 
    $result = pg_query($db,$query); 
    $row = pg_fetch_array($result,0,PGSQL_NUM); 
    $UniaquCount = $row[0]; 
    pg_close($db); 

    exit(); 

因此,對於快速回顧一下。我需要使用getinfo.php從客戶端獲取一些數據,然後通過jQuery將這些請求發送到process.php以傳遞到數據庫。任何幫助是極大的讚賞!

+0

你應該嘗試在JSON中編碼Process.php的響應,第二個想法是,你沒有發送任何響應! – progrAmmar

回答

0

非常感謝大家對我的幫助。下面是我用Ajax請求的代碼的最後片段:

<script type="text/javascript"> 
     $(document).ready(function(){ 

      // Create the AJAX request 
      $.ajax({ 
       type: "GET",          // Using the POST method 
       url: "getinfo.php",         // The file to call 
       dataType: "json",         // Our data to pass 

       success: function (data) {        // What to do on success 
        //On success define the following variables from getinfo.php 
        var ip = JSON.stringify(data["ip"]); 
        var url = JSON.stringify(data["url"]); 
        var browser = JSON.stringify(data["browser"]); 

        $.ajax({ 
         type: "POST",  //Using the POST method 
         url: "process.php", //The php file used to submit data to database 
         dataType: "text", // Our data to pass 
         cache: false, 
         data: { 
          page: url, 
          browser: browser, 
          ip_addy: ip, 

         }, 
         success: function (response, status) { 
          alert("*----Received Data----*\n\nResponse : " + response + "\n\nStatus : " + status); 

         } 
        }); 

       }, 
      }); 
     }); 
    </script> 

Ajax請求中所請求的數據拉然後將數據發佈到了PostgeSQL數據庫。再次感謝大家!我希望這能幫助別人試圖找出同樣的問題。

1

您不會在Process.php文件中發回任何內容。

嘗試以下方法:在process.php結束

$data = /** whatever you're serializing **/; 
header('Content-Type: application/json'); 
echo json_encode($data); 

使用該準備的所有數據之後。您不一定需要status參數。只需以您想要的任何格式製作數據即可。

+0

我不確定你的意思,請和我一起裸露我試圖得到這個。我只使用process.php將數據發送到數據庫。如果我排除$ .get請求並使用$ .post,它就可以工作。所以,我不確定我需要將「返回」發送給jQuery請求?除非,我只是誤解你告訴我的。 – Tastedalgory

+0

你的Process.php沒有發送任何迴應到AJAX。你需要在process.php結尾複製下面的代碼並粘貼'$ data =「Test Response」; header('Content-Type:application/json'); echo json_encode($ data);'看看會發生什麼 – progrAmmar

+0

也會從你的POST變量中刪除'json_decode'並嘗試 – progrAmmar

1

有一些錯誤。

首先,在你的「getinfo.php」中,用json正確回答。像:

$data = array(
      "browserid"=>$browserID, 
      "ip"=>$ip, 
      "url"=>$url, 
      ); 
header('Content-Type: application/json'); 
echo json_encode($data); 

然後在您的jQuery Ajax中,首先將數據類型設置爲:「json」,然後解析它。喜歡:

$.ajax({ 
    type: "GET", 
    dataType: "json", 
    url: "getinfo.php", 
    success: function(data) { 
     var browserid = data["browserid"]; 
     var ip = data["ip"]; 
     var url = data["url"]; 
     // 
     // Continue, the POST part (or) whatever you want here.. 
     // 
    } 
}); 
+0

嗨,大家好,我在回覆中等了很久,對此表示歉意。我現在只是回到這段代碼。我對getinfo.php進行了更改,現在我得到了json輸出。我也改變了我的ajax per @夏期劇場的建議。我現在成功了,當我使用'alert();'的時候得到了一個輸出。在這一點上,我正在處理代碼的發佈部分。另外,它工作正常,但是一旦嵌套,它不會從$ .GET請求中接收數據。那就是我現在所處的位置。 – Tastedalgory