我创建了一个PHP变量,然后将其值传递给SQL / PDO查询并向我显示所需的结果。我希望能够在AJAX的帮助下动态更改该值。我尝试了不同的组合,但我无法改变这个价值。这是我到目前为止所得到的:
home.php
$tsize = $_POST['tsize'];
$prodsize = $DB->prepare("SELECT * FROM templates WHERE tsize=?");
$prodsize->execute(array($tsize));
更改功能
function changeSize(tsize){
var tsize = tsize;
var xhr;
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE 8 and older
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
var data = tsize;
xhr.open("POST", "home.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(data);
}
从下拉菜单调用该函数,并显示结果。如果我在home.php中硬编码$ tsize值,结果会正确显示。我已经测试了“tsize”和“data”得到的值是什么,它们是有序的。但是我无法将它们发送到home.php。我的代码有问题吗?我还有两个home.php - 一个用于视图和一个控制器,也许它们相互作用导致问题?
编辑*对我来说,我的index.php给出了一个问题“ERROR - 找不到文件!!!”,我可以在我的Firebug控制台中看到它。
的index.php
<?php
session_start();
$all_url = explode('?', $_SERVER['REQUEST_URI']);
$url = explode('/', $all_url[0]);
//Homepage
if (empty($url[1])) {
$url[1] = 'frontpage';
}
//DB connect
$config = array(
'host' => 'xxx', //CHANGE THIS, DB SERVER
'user' => 'xxx', //CHANGE THIS, DB USER
'password' => 'xxx', //CHANGE THIS, DB PASSWORD
'database' => 'xxx' //CHANGE THIS, DB NAME
);
$DB = new PDO('mysql:host=' . $config['host'] . ';dbname=' . $config['database'], $config['user'], $config['password']);
$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$DB->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$DB->exec("SET names utf8");
if (file_exists('controller/' . $url[1] . '.php')) {
$gtpl = 'main';
$restricted = array('cart', 'home');
if (!isset($_SESSION['firstVisit']) && $url[1]!='frontpage') {
$_SESSION['firstVisit'] = false; //ensures we never enter this clause again
require 'controller/frontpage.php';
}else if (empty($_SESSION['uid']) && in_array($url[1], $restricted)) {
//not logged in, but trying to access restricted page.
require 'controller/login.php';
}else{
require 'controller/' . $url[1] . '.php';
}
require 'view/' . $gtpl . '.php';
} else {
echo 'ERROR - File not found!!!';
}
答案 0 :(得分:0)
您忘记在tsize
的ajax请求中发送关键部分,请使用此功能;
function changeSize(tsize){
var tsize = tsize;
var xhr;
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE 8 and older
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
var data = "tsize=" + tsize;
xhr.open("POST", "home.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(data);
}
答案 1 :(得分:0)
问题是您没有命名参数。当您使用POST时,在发送中,您需要为参数命名并放置其值。
像这样:
xhr.send("uid="+user1);
您还应该在发送数据之前检查就绪状态。
xhrhttp.onreadystatechange=function()
{
if (xhrhttp.readyState==4 && xhrhttp.status==200)
{
document.getElementById("alertbar").innerHTML=xmlhttp.responseText;
}
}