2011-03-25 27 views
1

我想通过使用jquery的imap_conection(PHP Imap库)。帖子似乎不起作用 - 有什么我应该尝试吗?将资源对象从Jquery传递给PHP?

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 [ '连接']变量Resource id #57

编辑补充

我连接到IMAP使用PHP库的imap电子邮件地址的主要问题。当我尝试多次使用ajax重复连接(进行多个关键字搜索)时,我倾向于失去与某些电子邮件提供商(主要是Hotmail)的连接,所以我试图集中一个连接,所以我不会失去连接 - 这是为什么我想要1个连接资源并传递连接。是否有另一种可能的解决方案

我使用多个ajax调用/ imap连接的原因是我想尽可能快地向用户提供数据。这种搜索通常每个需要大约8-10秒。

回答

4

$connection是一个特殊的php“类型”,被称为资源。它们由诸如mysql_connect,fopenimap_open之类的函数创建,并代表底层C库中的某种状态。这些资源是只有在页面执行期间有效。一旦PHP完成执行页面,资源就会被释放。这是问题的第一部分。

第二部分是当您打印资源时,它将转换为字符串。此字符串表示已丢失资源的基础状态,并且无法转换回资源。因此没有办法做你想做的事情。

您需要做的是在search.php中重建与imap服务器的连接,并从ajax调用中删除连接参数。

+0

感谢您的支持。我真的需要传递资源,因为某些电子邮件客户端(即Hotmail)在每次使用ajax进行连接时会在几次连接(可能是6或7)之后断开连接。 – 2011-03-25 13:14:06

+0

@鲍勃,没关系。即使你使用ajax,它也会每次重新连接。 – 2011-03-25 13:39:21

+0

fsocketopen()如何使用持久连接?我刚刚发现这篇文章,它似乎与我有同样的问题... http://www.phpfreaks.com/forums/index.php?topic=257822.0 – 2011-03-25 13:41:37

1

这是因为您的网址不应包含&connection=<?php echo $connection ;?>,因为它是资源,当您尝试将其回显到JavaScript中时,它会转换为字符串:Resource id #57。您无法使用JavaScript传递PHP资源。

+0

是否有任何解决方案发送此资源到不同的PHP页面的Ajax? – 2011-03-25 13:07:08

+0

不,您只能在PHP中传递这些资源。如果您尝试将其传递给JavaScript,则PHP会将其转换为字符串。你想完成什么?如果你能把我放在画面中,也许我可以帮助你。 – 2011-03-25 13:09:29

+0

使用PHP Imap Library连接到imap电子邮件地址。当我尝试多次使用ajax重复连接(进行多个关键字搜索)时,我倾向于失去与某些电子邮件提供商(主要是Hotmail)的连接,所以我试图集中一个连接,所以我不会失去连接 - 这是为什么我想要1个连接资源并传递连接。有另一种可能的解决方案吗 – 2011-03-25 13:13:15

1

您这里有两个主要问题:

  1. 当你试图呼应资源对象,你调用它的__toString()方法。这通常会打印出对象的非常一般的描述,就像你在这里看到的那样。将对象转换为其他地方的正确方法是使用serialize()函数。 See the docs for it
  2. 即使你尝试序列化它,它也会失败。资源对象是非常依赖状态的,因此不能像这样传递。它可以在打开它的脚本中使用,就是这样。有关更多信息,请参阅上面的文档。

作为额外的奖励:

你不会逃避任何一个值,你dataString,这很容易导致价值被误解,如果有一个?或它&。您应该对正在形成的每个值运行escape,或做这样的事情:

var data = { 
    username: '<?php echo $username ?>', 
    password: '<?php echo $password ?>' 
}; 

$.ajax({ 
    type: "POST", 
    url: "search.php", 
    data: data, 
    ... 
}); 

jQuery将采取的对象,并形成数据串的你,做适当的转义。更容易阅读,更容易放在一起,并且更容易犯错误。

+0

我的其他选择是什么?是否有可能将这个对象存储到某个地方以将其转移到不同的php文件中? – 2011-03-25 13:17:10