【问题标题】:How to get $_SESSION value updated when jscript confirm and call PHP by AJAXjscript确认并通过AJAX调用PHP时如何获取$SESSION值更新
【发布时间】:2020-07-20 10:47:14
【问题描述】:

经过大量尝试,我需要帮助。单击事件后,我检查数据库中存在的数据并使用 jscript 弹出确认框。

当我点击取消时如何让它工作,它没有显示我在confirm.php上设置的任何值?

用 OK 确认并取消

jscript 代码:

if($row_count2 > 0)
{
    if ($row2["Status"] == "REJECTED")
    {
    <script type="text/javascript">
        if (!confirm('Lot No has been REJECTED before.. Double confirm to add the Lot No!!')) {
        var option = "NO";
        $.ajax({
            type: "POST", 
            url: "confirm.php",
            data: "value="+option,
            success: function (data) {
                alert(data);
            }         
        });
    }
    </script>
    }
}

$ll = $_SESSION['Confirm'];
echo "<script type='text/javascript'>alert('$ll');</script>";

if ($row_count2 < 1 || ($_SESSION['Confirm'] = "YES"))
{
    //my insert query is here...
}

这是在confirm.php里面:

<?php    
    session_start();
    
    $xx = $_REQUEST["value"];
    $_SESSION['Confirm'] = $xx;
    echo "<script type='text/javascript'>alert('$xx');</script>";
?>

我希望$_SESSION['Confirm'] 的值为 NO

默认$_SESSION['Confirm']值为YES

alert(data) 显示 $xx 为 NO 但当我在 if 条件下对 $_SESSION['Confirm'] 值发出警报时 在我的插入查询之前$_SESSION['Confirm'] 值仍然是 YES

【问题讨论】:

  • 这里的代码:$ll = $_SESSION['Confirm']; echo "&lt;script type='text/javascript'&gt;alert('$ll');&lt;/script&gt;";看起来它是在您的 AJAX 代码之前执行的。一旦前面的 PHP 代码行(将 AJAX 代码输出到浏览器的那些行)运行,它将在服务器上执行。在收集 Session 值之前,您似乎没有给用户任何时间来响应确认对话框。不要忘记 所有 PHP 代码将在任何 JavaScript 代码传送到浏览器之前在服务器上执行。
  • 听起来你应该先好好、彻底地阅读What is the difference between client-side and server-side programming?

标签: javascript php ajax post confirm


【解决方案1】:

而不是使用真的很麻烦的 JScript 警报.. 我最终使用模态弹出警报..

<div class="modal-content">
    <div class="modal-header bg-secondary">
        <button type="button" class="close" data-dismiss="modal"></button>
        <h4 class="modal-title text-white ">Confirmation</h4>
    </div>
    <div class="modal-body">                    
        <div class="box-body">
            <form class="form-signin">
                <label for="txtLotNo" class="mr-sm-2 ml-sm-4">Lot No : '.$lotNo.' has been REJECTED before.. Double confirm to add the Lot No!!</label>                   
                <br>
                <div class="text-center">
                    <button type="button" id="getAdd" class="btn btn-warning btn-sm" data-toggle="modal" data-target="#myAdd" data-id="YES'.$lotNo.$newLotNo.'" >YES</button>
                    <button type="button" id="getAdd" class="btn btn-warning btn-sm" data-toggle="modal" data-target="#myAdd" data-id="NO" >NO</button>
                </div>
            </form>
        </div>
    </div>
</div>

然后我使用 JScript 调用一个 php 文件,它可以完美地处理 data-id..

    <script>
        $(document).on('click','#getAdd',function(e){
            e.preventDefault();
            var per_id=$(this).data('id');
            //alert(per_id);
            $('#add-data').html('');
            $.ajax({
                url:'addLot_func.php',
                type:'POST',
                data:'id='+per_id,
                dataType:'html'
            }).done(function(data){
                $('#add-data').html('');
                $('#add-data').html(data); 
            }).fail(function(){
                $('#add-data').html('<p>Error</p>');
            });
        });
    </script>   

在addLot_func.php中:

    if(isset($_REQUEST['id'])){
        $id=intval($_REQUEST['id']);

        $reject = $_REQUEST['id'];
    }
    else $reject = "";

    if(substr($reject,0,3) == "YES")
    {
        ...
    }
    else
    {
        ...
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多