从Jquery向PHP传递资源对象?

从Jquery向PHP传递资源对象?,php,jquery,Php,Jquery,我试图使用Jquery传递一个imap连接(PHPIMAP库)。这篇文章似乎不起作用——还有什么我应该试试的吗 PHP $connection = imap_open($mailServer,$login,$password); jQuery var dataString='email=<?php echo $email_address; ?>&connection=<?php echo $connection; ?>&password=<

我试图使用Jquery传递一个imap连接(PHPIMAP库)。这篇文章似乎不起作用——还有什么我应该试试的吗

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,
var-dataString='email=&connection=&password=&server=&daysago='+daysago+'&num='+num;
$.ajax({
类型:“POST”,
url:“search.php”,
数据:dataString,
现在,Firebug告诉我$u POST['connection']变量是
Resource id\57

编辑以添加

主要问题

我正在使用PHP imap库连接imap电子邮件地址。当我多次尝试重新连接ajax(执行多个关键字搜索)时,我往往会失去与某些电子邮件提供商的连接(主要是Hotmail),所以我试图集中一个连接,这样我就不会丢失连接-这就是为什么我想要一个连接资源并传递连接。还有其他可能的解决方案吗


我之所以使用多个ajax调用/imap连接,是因为我想让数据尽可能快地提供给用户。每次搜索通常需要8-10秒。

这是因为您不应该将
&connection=
包含到URL中,因为它是一个资源,当您尝试将其回送到javascript中时,它会被删除转换为字符串:
资源id#57
。您不能使用JavaScript传递PHP资源。

这是因为您不应该将
&connection=
包含到URL中,因为它是一个资源,当您尝试将其回显到JavaScript中时,它会转换为字符串:
资源id#57
。您不能传递PHP资源使用JavaScript。

$connection
是一种特殊的php“类型”被称为资源。这些资源是由诸如
mysql\u connect
fopen
imap\u open
之类的函数创建的,代表底层C库中的某种状态。这些资源仅在页面执行期间有效。一旦PHP完成页面执行,资源就会被释放。这就是fir这是问题的一部分

第二部分是,当您打印资源时,它会转换为字符串。此字符串表示已丢失资源的基本状态,无法转换回资源。因此,无法执行您尝试执行的操作


您需要做的是在search.php中重新建立与imap服务器的连接,并从ajax调用中删除连接参数。
$connection
是一种特殊的php“类型”被称为资源。这些资源是由诸如
mysql\u connect
fopen
imap\u open
之类的函数创建的,代表底层C库中的某种状态。这些资源仅在页面执行期间有效。一旦PHP完成页面执行,资源就会被释放。这就是fir这是问题的一部分

第二部分是,当您打印资源时,它会转换为字符串。此字符串表示已丢失资源的基本状态,无法转换回资源。因此,无法执行您尝试执行的操作


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

这里有两个主要问题:

  • 当您尝试回显资源对象时,您正在调用它的
    \uuu toString()
    方法。正如您在这里看到的,这通常会打印对象的非常通用的描述。转换对象以传递到其他地方的正确方法是使用
    serialize()
    函数
  • 即使您尝试序列化它,它也会失败。资源对象非常依赖于状态,因此不能像这样传递。它可以在打开它的脚本中使用,仅此而已。有关详细信息,请参阅上面的文档
  • 作为额外的奖励:

    您没有转义数据字符串中的任何值,如果其中有
    &
    ,则很容易导致值被误解。您应该对形成的每个值运行
    escape
    ,或者执行以下操作:

    var data = {
      username: '<?php echo $username ?>',
      password: '<?php echo $password ?>'
    };
    
    $.ajax({
      type: "POST",
      url: "search.php",
      data: data,
      ...
    });
    
    var数据={
    用户名:“”,
    密码:“”
    };
    $.ajax({
    类型:“POST”,
    url:“search.php”,
    数据:数据,
    ...
    });
    

    jQuery将为您获取对象并形成数据字符串,并进行适当的转义。更易于阅读、更易于组合,更不容易出错。

    这里有两个主要问题:

  • 当您尝试回显资源对象时,您正在调用它的
    \uuu toString()
    方法。正如您在这里看到的,这通常会打印对象的非常通用的描述。转换对象以传递到其他地方的正确方法是使用
    serialize()
    函数
  • 即使您尝试序列化它,它也会失败。资源对象非常依赖于状态,因此不能像这样传递。它可以在打开它的脚本中使用,仅此而已。有关详细信息,请参阅上面的文档
  • 作为额外的奖励:

    您没有转义数据字符串中的任何值,如果其中有
    &
    ,则很容易导致值被误解。您应该对形成的每个值运行
    escape
    ,或者执行以下操作:

    var data = {
      username: '<?php echo $username ?>',
      password: '<?php echo $password ?>'
    };
    
    $.ajax({
      type: "POST",
      url: "search.php",
      data: data,
      ...
    });
    
    var数据={
    用户名:“”,
    密码:“”
    };
    $.ajax({
    类型:“POST”,
    url:“search.php”,
    数据:数据,
    ...
    });
    

    jQuery将为您获取对象并形成数据字符串,并进行适当的转义。更易于阅读,更易于组合,更不容易出错。

    有没有解决方案可以将此资源发送到ajax的其他php页面?没有,您只能在php中传递这些资源。如果您尝试将其传递给JavaScript