【问题标题】:Display a session var without refresh the page显示会话变量而不刷新页面
【发布时间】:2015-10-10 20:09:24
【问题描述】:

我在这样的 ajax 文件中设置了一个会话变量:$_SESSION['id_essai']=$ligne[1];。这个变量的值应该在每次提交表单时改变。

不给页面充值,我想获取这个var的值。所以我这样回应:echo $_SESSION['id_essai']; 我的问题是,当我尝试回显它时,我会得到以前的值,直到我为页面充电。我想在不为页面充电的情况下刷新此 var。我怎样才能做到这一点 ?

编辑:

我像这样向我的 ajax 文件发送一个可操作的网格:

$(document).ready(function(){
        $('#submit_button_essai').click(function(){

            $.post("ajax_insert_essai.php",{arr:data_essai}, insert_essai_callback,'json'); 
            return session;
        });
    });

在这个 ajax 文件中,我用这个网格的一个值声明我的会话变量,我可以这样返回它:

array_unshift($tab_erreur,$_SESSION['id_essai']);

    echo json_encode($tab_erreur);    

所以我发送了一个错误数组和我在回调函数中处理的会话变量:

function insert_essai_callback(responseObject,ioArgs) //ajax renvoie les indices des cases erronnées et les messages correspondants.
{
var jsonobject = eval(responseObject);
console.log(jsonobject);
//alert(jsonobject[0]);
var session = jsonobject[0];

for(var item in jsonobject)
{       
        if((item % 2 ) == 0) //Si l'indice est pair, on affiche la couleur
        {
            $("td").eq(jsonobject[item-1]).after("<div class=\"message\">"+jsonobject[item]+"</div>");
        }else //Si l'indice est impair, on affiche le message 
        {
            $("td").eq(jsonobject[item]).css("background-color","red");
        }   

}

}

我的会话变量位于jsonobject[0]。 这是我尝试在 ajax 中返回会话变量后的代码。

【问题讨论】:

  • 如果您使用 ajax 提交表单,则获取您在会话中设置的响应变量,以便获取值。
  • @DishaV。我试过了,但这并不容易。我不能用这个方法:/
  • 如果你用ajax修改了一些东西,你也需要用ajax刷新它。为什么它不那么容易?给我们看一些代码
  • @Daimos 实际上,我正在使用handsontable(并且用户提交网格),并且我将一个数组发送到ajax。之后,我得到另一个包含用户错误的数组。我试图将我的会话变量添加到这个数组中并在回调函数中处理它。但我不知道如何通过这种方式获取 var。如果你愿意,我会用更多代码编辑我的帖子。
  • 您如何开始您的会话?通常这是通过您的请求中的 cookie 或 PHPSESSID 参数来完成的。确保在您的请求中发送此内容。

标签: javascript php session


【解决方案1】:

我认为问题在于每个请求都会在服务器上启动一个新会话。

<?php

session_start();

// Restart the last session if a session-id is given
if (isset($_GET['session-id'])
    session_id($_GET['session-id']);

/* ... your code here .. */

$response = array('session-id' => session_id());

/* ... add some more values/results to your response */

header('Content-Type: application/json');
die(json_encode($response));

?>

【讨论】:

  • 但是每个请求都需要开始一个新的会话。
  • @Lison 那么您将不需要会话;)您希望在每个请求上启动相同的会话,而不是新的会话。否则新的会话开始都是空的!
  • 好的,但是如何在不刷新的情况下显示它? ^^
【解决方案2】:

设置一个新的 PHP 文件。然后在点击事件或更改事件或其他东西上使用 ajax 将需要更新的值发送到会话变量。当它接收到值时,PHP 将更新会话值。然后以 JSON 格式返回该变量的值。 Tada 你得到了更新的值。我希望你能理解..

示例代码如下所示

在 ajax 中(我在这里使用的 jquery ajax)

 $.ajax({

  url : 'session.php',
  method : 'POST',
  data : your value to update ,
  dataType : json,
  success : function(data){

      alert(data.value);

   }


 })

在 session.php 文件中

  <?php
    session_start();
    $value = $_POST['value'];
    $_SESSION['value'] = $value;
    $json = array('value' => $_SESSION['value'] );
    print_r(json_encode($json));


  ?>

如果您需要在不刷新的情况下获取值,请在事件上调用 ajax 函数。然后将返回的数据更新为 div 什么的。我希望这个有帮助! :)

【讨论】:

  • 这似乎是个好主意,但我不明白顺序。为什么要新建一个php文件?
  • 但我确实得到了价值,我知道该怎么做。这是我没有得到的“更新”部分。
  • 你想把值放在哪里??。在客户端还是服务器端??
  • 客户端,我要显示在我的页面上
  • $('element').text() pr $('element').html();
【解决方案3】:

在那里创建一个process.php 文件和post/get form

<form method = 'post' action = 'process.php'>
    <input type = 'hidden' value = 'some_Hidden_Value_that_You_Want' id = 'hidden_id'>
    <!--Some other stuff (Grid may be) -->
    <input type = 'button' value = 'Submit' id = 'submit_form'>
</form>

$("#hidden_id").click(function(){
    var hidden_id = $('#hidden_id').val()
    $.ajax({
        url: 'process.php',
        type: 'POST',
        data:{
            want_this: hidden_id
        },
        success: function(posted){
            alert(posted);
        }
    });
});

这会将您的内容发布到处理页面。

process.php 或在你的情况下ajax_insert_essai.php

这样做是为了查看你得到了什么

<?php print_r($_POST); ?>

编辑

callback

obj = $.parseJSON(jsonobject[0]);
console.log(obj);
// this was to update the page without refreshing the page
//          $this = $('#'+obj.ID).find('td');
//          $this.eq(2).html(obj.username);
//          $this.eq(3).html(obj.password);
//ignore these lines
/*You can access all your stuff then like that*/
condole.log('some id' + obj.id);
//and so on...

【讨论】:

  • 或在ajax_insert_essai.php 上执行此操作echo json_encode($_POST);
  • 我已经这样做了:array_unshift($tab_erreur,$_SESSION['id_essai']); echo json_encode($tab_erreur);
  • 所以,我需要在我的回调函数中提醒会话变量?
  • 在您的callback 中执行alert(response);
  • 你会得到你想要的,希望:)
【解决方案4】:

如果将成为新会话变量的数据是从页面发送的,那么它也会使用页面上已有的数据来使用 JavaScript 更新到页面。

如果您要返回的数据是从页面发送的,则无需重新获取数据,因为它已经在页面上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 2012-07-31
    相关资源
    最近更新 更多