2011-03-25 63 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