我试图使用Jquery传递一个imap_conection (PHP )。帖子似乎不管用--还有什么我应该试试的吗?
$connection = imap_open($mailServer,$login,$password);jQuery
var dataString='email=<?php echo $email_address; ?>&connection=<?php echo $connection; ?>&password=<?php echo $password; ?>&server=<?php echo $server;?>&daysago='+daysago+'&num='+num;
$.ajax({
type: "POST",
url: "search.php",
data: dataString,现在,Firebug告诉我$_POST‘’connection‘变量是Resource id #57
编辑以添加
主要议题
我正在使用PHP imap库连接到Imap电子邮件地址。当我尝试多次使用ajax重新连接(执行多个关键字搜索)时,我倾向于失去与某些电子邮件提供商(主要是Hotmail)的连接,所以我试图集中一个连接,这样就不会失去连接--这就是为什么我想要一个连接资源并传递连接。还有别的解决办法吗?
我使用多个ajax调用/imap连接的原因是我希望尽可能快地将数据提供给用户。这种搜索通常需要8-10秒。
发布于 2011-03-25 13:09:08
$connection是一种特殊的php“类型”,称为资源。它们由mysql_connect、fopen和imap_open等函数创建,并表示底层C库中的某种状态。这些资源仅在页执行期间有效。一旦PHP完成页面的执行,资源就会被释放。这是问题的第一部分。
第二部分是,当您打印一个资源时,它被转换为一个字符串。此字符串表示形式已失去资源的基础状态,无法转换回资源。因此,没有办法做你想做的事。
您需要做的是在search.php中重新建立到imap服务器的连接,并从ajax调用.中删除连接参数。
发布于 2011-03-25 13:06:06
这是因为您不应该将&connection=<?php echo $connection ;?>包含到您的URL中,因为它是一个资源,当您试图将它回显到javascript中时,它会被转换为一个字符串:Resource id #57。不能使用JavaScript传递PHP资源。
发布于 2011-03-25 13:13:11
这里有两个主要问题:
__toString()方法。这通常会打印出对对象的非常通用的描述,正如您在这里所看到的。转换对象以传递到其他地方的正确方法是使用serialize()函数。请看文档。。作为额外的奖励:
您不能逃避dataString中的任何值,如果其中包含?或&,则很容易导致对值的误解。您应该对正在形成的每个值运行escape,或者执行如下操作:
var data = {
username: '<?php echo $username ?>',
password: '<?php echo $password ?>'
};
$.ajax({
type: "POST",
url: "search.php",
data: data,
...
});jQuery将接受对象并为您形成数据字符串,并进行适当的转义。更容易阅读,更容易放在一起,更不容易犯错误。
https://stackoverflow.com/questions/5432747
复制相似问题