在没有直接交互的情况下保存到$_SESSION


Saving into $_SESSION without direct interaction

我有一个表,它的<td>元素包含input字段:

<td>
    <input type='text' id='field001'>
</td>

现在,我正在寻找一种方法来存储,我正在input字段中键入该值,并将其直接存储到$_SESSION变量中。这没有任何直接的用户交互。因此,没有任何submitonClick()事件。

用户应该能够访问网站上的其他页面,而不会丢失之前输入到表格中的信息
我想使用AJAX一定有办法完成这项任务,但我不知道当输入字段有新文本时(尤其是在没有用户交互的情况下)如何触发事件?

想象一下,一个Excel工作簿有两张纸表1是一个需要填写的表格,表2包含一些进一步的信息。在Excel中(显然),您可以在工作表之间切换,而不会丢失表中的输入。

您可以每隔5秒将输入值保存到数据库表中,或者使用ajax将其存储为PHP$_SESSION。

$("#field001").keyup( function(){
var timer ;
   clearInterval(timer);//reset timer while typing
   var text = $(this).val();//grab input box text
   timer = setInterval(function(){
   $("#feedback").text("Saving...");
   //ajax post to php page
   $.post("save_data_page.php",{text:text},function(){
   $("#feedback").text("");});
   },5000);//save text every 5 secs
})

在"save_data_page.php"中,使用代码:

<?php
if (!isset($_SESSION)) 
{ 
session_start();//start a session
}
if(isset($_POST['text'])){
  //create a session variable called typed_text01
  $_SESSION['typed_text01']=$_POST['text'];
}
?>

在您的输入框中,您可以回显存储的会话值,如下所示

<input id="field001" val="<?php echo $_SESSION['typed_text01']; ?>" />

我想说的最好的方法实际上是使用$_SESSION(或某些框架中的等效用户会话概念)或使用cookie。在我看来,饼干更难吃,尽管有些人可能会说它们对你想要实现的目标很有效。

为了在用户不点击任何特定内容或提交任何表单的情况下做到这一点,您必须找到一种方法,在用户完成填写后始终保存用户输入。

值得庆幸的是,每当用户填写完输入元素并单击其他内容时,输入就会失去焦点。DOM元素有一些事件,这些事件在输入字段获得焦点或失去焦点时触发(如果我没有弄错的话)。使用jQuery可以很容易地将函数注册到这些事件中。当失去焦点事件触发时,您可以向服务器发送一个Ajax请求,其中包含用户刚刚填写的数据,以及用户交互的字段的id。在服务器中,您可以将其存储在$_SESSION变量中(我相信在调用类似SESSION_create()的东西之后)。

如果焦点事件不能满足您的需求,您将不得不找到另一种方式来触发与服务器的ajax通信,因为显然无法实现这一点。

我想使用AJAX一定有办法完成这项任务,但我不知道当输入字段有新文本时(尤其是在没有用户交互的情况下)如何触发事件?

如果您想在没有用户交互的情况下执行此操作,请使用setInterval

如果要在输入字段包含文本时(即用户与它交互以输入新文本时)执行此操作,请使用输入或更改事件。