我有一个PHP后端脚本,我正在创建一个PHP Session变量:
if(!isset($_SESSION))
session_start();
if(isset($_SESSION['uid']))
unset($_SESSION['uid']);
$_SESSION['uid']=$this->_out;
在我的HTML脚本中,我使用以下方式访问它:
editor = new $.fn.dataTable.Editor( {
ajax: {url:"euseradd.php",complete : function(){var uid='<?php if(!isset($_SESSION)) session_start();if(isset($_SESSION["uid"])){echo $_SESSION["uid"];unset($_SESSION["uid"]);}?>';alert(uid)}},
......................
} );
但我没有得到这个值 - 我的警告打印出空值。但是,当我尝试通过以下方式回显WAMP服务器Apache日志中的会话变量输出时:
echo 'Value is ' . $_SESSION['uid']
我收到错误&#39;注意:数组到字符串转换&#39; - 我的目的是记录某些日志中的值以查看值后端也分配的值。
修改
我通过以下方式修改了echo语句:
echo 'Hello ' . serialize($this->_out);
现在我在浏览器端获取数据,如:
Hello a:5:{s:2:"id";i:-1;s:11:"fieldErrors";a:0:{}s:5:"error";s:0:"";s:4:"data";a:0:{}s:3:"row";a:11:{s:8:"DT_RowId";s:7:"row_135";s:2:"id";s:3:"135";s:9:"last_name";s:6:"sdfdsf";s:10:"first_name";s:3:"dsf";s:8:"homeaddr";s:21:"sdfdsfsdfdsfdsfdsfdsf";s:5:"email";s:8:"s@jj.com";s:10:"officeaddr";s:24:"wwwwwwwwwwwwwwwwwwwwwwww";s:6:"mobile";s:8:"11111111";s:3:"age";s:2:"11";s:9:"chargeamt";s:2:"11";s:10:"start_date";s:10:"11/11/2011";}}{"row":{"DT_RowId":"row_135","id":"135","last_name":"sdfdsf","first_name":"dsf","homeaddr":"sdfdsfsdfdsfdsfdsfdsf","email":"s@jj.com","officeaddr":"wwwwwwwwwwwwwwwwwwwwwwww","mobile":"11111111","age":"11","chargeamt":"11","start_date":"11\/11\/2011"}}
我需要提取价值&#34; id&#34;:&#34; 135&#34;从它。
实际上由于某些约束,我无法对我的操作使用成功函数。因为我正在解决一个问题,我正在为我所拥有的问题编写代码
修改
我尝试打印如下的值:
echo 'Hello ' . serialize($this->_out['row']['DT_RowId']);
我在控制台日志中得到以下输出:
Hello s:7:"row_140";{"row":{"DT_RowId":"row_140","id":"140","last_name":"sdfdsf","first_name":"dsf","homeaddr":"sdfdsfsdfdsfdsfdsfdsf","email":"s@jj.com","officeaddr":"wwwwwwwwwwwwwwwwwwwwwwww","mobile":"11111111","age":"11","chargeamt":"11","start_date":"11\/11\/2011"}}
我不确定输出的结构是什么 - 但我如何从上面提取&#34; id&#34;:#34; 140&#34; 。我只是猜测&#34; row_140&#34;不是常量名称,而是row_#record number
修改
以下是 echo print_r($ this-&gt; _out); 的输出:
Array
(
[id] => -1
[fieldErrors] => Array
(
)
[error] =>
[data] => Array
(
)
[row] => Array
(
[DT_RowId] => row_157
[id] => 157
[last_name] => sdfdsf
[first_name] => dsf
[homeaddr] => sdfdsfsdfdsfdsfdsfdsf
[email] => s@jj.com
[officeaddr] => wwwwwwwwwwwwwwwwwwwwwwww
[mobile] => 11111111
[age] => 11
[chargeamt] => 11
[start_date] => 11/11/2011
)
)
1{"row":{"DT_RowId":"row_157","id":"157","last_name":"sdfdsf","first_name":"dsf","homeaddr":"sdfdsfsdfdsfdsfdsfdsf","email":"s@jj.com","officeaddr":"wwwwwwwwwwwwwwwwwwwwwwww","mobile":"11111111","age":"11","chargeamt":"11","start_date":"11\/11\/2011"}}
答案 0 :(得分:0)
我不确定我是否理解你的问题。但是session_start()
应该在php脚本的页面的最开头调用。也就是说,在打印之前。因为会话标头应该发送到浏览器。
当你预先形成ajax时,不要混淆PHP。通过ajax将用户详细信息发送到PHP脚本。然后让php脚本返回用户ID作为响应,然后你可以在你的javascript中使用它。您在浏览器上获得的页面实际上是PHP脚本的输出。我的意思是,PHP脚本中的所有PHP代码都将被执行,输出就是您在浏览器上获得的。因此,当您的页面执行(从浏览器访问)时,您的javascript中的var uid = '';
已经有了PHP脚本的结果。在AJAX通话后它不会得到更新!
对于数组错误,我相信您正在为$_SESSION['uid']
分配一个数组。我认为如果你只是将值(即用户id)存储为该会话中的int或string而不是数组会更好!
答案 1 :(得分:0)
你不能像那样从jquery访问php变量
只有echo $_SESSION['uid']
对你的jquery回调函数有一个更简单的解决方案,并使用jquery访问它,有些像这样
<强> useradd.php 强>
if(!isset($_SESSION))
session_start();
if(isset($_SESSION['uid']))
echo $_SESSION['uid'];
unset($_SESSION['uid']);
<强> Jquery的强>
$.ajax({
url : "euseradd.php",
cache: false,
success: function(responseText){
alert(responseText); //this should contain your session uid
}
}); //end of ajax call
return false;