【问题标题】:How to modify $_SESSION var dynamically using ajax如何使用 ajax 动态修改 $_SESSION var
【发布时间】:2015-05-27 12:10:53
【问题描述】:

我正在开发一个网站,允许用户在公共数据库上进行查询,我希望允许用户查看他在当前会话期间所做的查询并删除他想要的其中一个。

这里是创建$_SESSION['history']的代码:

$_SESSION['history'][] = array(
    'Database' => $_SESSION['db'],
    'Choice' => $_SESSION['radio'],
    'Query' => $_SESSION['query'],
    'Résult' => ($asResults),
    'Date' =>  date("d-m-Y"),
    'Hour' => date("H:i:s")     
);

这里是显示 $_SESSION['history'] 数组的代码:

<?php
function displayHistory($arQueryArray)
{
if (isset($_SESSION['history']))
{
    echo '<table id="history" class="display">';
    $iQueryNumber = 0;

    echo '<thead><tr>';
    echo '<th>n°</th>';
    foreach (array_keys($_SESSION['history'][0]) as $field)
    {
        if ($field != 'Résult' and $field != 'Choice')
            {
                echo '<th>', $field, '</th>';
            }
    }
    echo '<th></th><th></th>';
    echo '</tr></thead>';

    echo '<tbody>';
    foreach ($_SESSION['history'] as $query) 
    {
        echo '<tr>';
        echo '<td>', ($iQueryNumber + 1), '</td>';
        foreach ($query as $field => $value) 
        {
            if ($field != 'Résult' and $field != 'Choice' and $field != 'Requête')
            {
                echo '<td>', $value, '</td>';
            }
            else if ($field == 'Query')
            {
                echo '<td>' . $arQueryArray[$query['Choice']] . " " . $query['Query'] . '</td>';
            }
        }
        ?>
        <td>
        <input type="button" class="del_btn" value="X" title="Delete this query" onclick="delQueryInHistory(<?php echo $iQueryNumber; ?>, this);"/>
        </td>
        <?php
        echo '</tr>';
        $iQueryNumber += 1;
    }
    echo '</tbody></table>';
}
else
{
    echo "<p>No query</p>";
}
}
?>

这里是javascript:

var XHR = null;


function getXMLHTTP()
{
    var xhr = null;
    if(window.XMLHttpRequest)
    { // Firefox 
        xhr = new XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    { // Internet Explorer
        try
        {
            xhr = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e)
        {
            try
            {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e1)
            {
                xhr = null;
            }
        }
    }
    else
    { // XMLHttpRequest not supported
        alert("YOur browser doesn't support XMLHTTPRequest...");
    }

    return xhr;
}


//Query suppression function
function delQueryInHistory(queryId, self)
{
    XHR = getXMLHTTP();

XHR.open("GET", "controleur/delQueryInHistory.php?queryId=" + queryId, true);

XHR.onreadystatechange = function()
{

    if (XHR.readyState == 4)
    { 
self.parentNode.parentNode.parentNode.removeChild(self.parentNode.parentNode);
    }
}
XHR.send();
}

这里是调用的php

    <?php
session_start();

if(empty($_GET['queryId']) or !is_numeric($_GET['queryId']) or !isset($_GET['queryId']))
{
    exit;
}
else
{
    unset($_SESSION['history'][intval($_GET['queryId'])]);
} 
?>

问题是它根本不运行,我不明白为什么,因为我没有提出任何错误!即使我使用损坏的php文件...我已经验证了php文件的路径是OK的!

对不起我的英语,谢谢..

** 最后更新:** 抱歉,我忘了说什么特别没有运行:该行已正确删除,但 $_SESSION['history'][queryId] 未删除!但是XmlHttp 对象已创建!谢谢。

【问题讨论】:

  • 哪位不起作用?页面不加载,XHR 不触发,XHR 触发但不删除行,XHR 触发但会话值不改变?
  • 我已经修改了我的帖子,谢谢!
  • 您的if..else 可能处于错误状态。在你的 PHP 输出中你可以调试的东西,例如而不仅仅是exit;ing,返回每个测试条件的输入和结果,以便您可以调试它。然后在控制台中查看 XHR 返回的内容(如果未在 Console中勾选 log xhr's,它将位于 Network 选项卡中> 选项卡),这样您就可以准确地看到正在发生的事情
  • 谢谢保罗 S!问题不在 if..else 中,但您的提示帮助我解决了我的问题(unset() 不能标准化整数键,我不太明白为什么,但是当我修复它时,一切没问题)谢谢!

标签: javascript php ajax session


【解决方案1】:

我已经找到了解决问题的方法,也许它会有所帮助

<?php
session_start();

if(empty($_GET['queryId']) or !is_numeric($_GET['queryId']) or !isset($_GET['queryId']))
{
    exit;
}
else
{
    unset($_SESSION['history'][$_GET['queryId']]);
    $_SESSION['history'] = array_values($_SESSION['history']);
} 
?>

unset() 函数不规范整数索引,它在显示过程中破坏了我的代码!

【讨论】:

    猜你喜欢
    • 2016-02-24
    • 2012-10-19
    • 2017-02-19
    • 2012-03-16
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    相关资源
    最近更新 更多