你必须原谅我的问题的天真。我对使用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 get和post请求,我写了这个。
<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 :(得分:1)
您没有在Process.php文件中发回任何内容。
尝试以下方法:
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);
在准备好所有数据后,在process.php的末尾使用它。您不一定需要status
参数。只需以您想要的任何格式制作数据。
答案 1 :(得分:1)
有很多错误。
首先,在您的&#34; getinfo.php&#34;中,使用json
正确回复。像:
$data = array(
"browserid"=>$browserID,
"ip"=>$ip,
"url"=>$url,
);
header('Content-Type: application/json');
echo json_encode($data);
然后在你的jQuery Ajax中,首先将数据类型设置为:&#34; json&#34;,然后解析它。像:
$.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..
//
}
});
答案 2 :(得分: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数据库。再次感谢大家!我希望这可以帮助其他人试图找出同样的问题。