使用AJAX更改PHP变量值

时间:2014-04-16 13:56:53

标签: php jquery ajax

我创建了一个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!!!';

}

2 个答案:

答案 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;
    }
}