2010-07-26 89 views
0

我有一個變量$ visitRecord-> getReferallist(),它獲取數組中的醫生列表。我需要將數組發送到一個PHP文件,並在PHP文件做foreach動作..我如何發送這個數組變量在jQuery中。此代碼無效。使用jquery發送數組

function seekOpinion() 
    { 
    var queryUrl = "<?php echo $this->url(array('controller' => 'consultant', 'action' =>'opiniondoclist'));?>"; 
    $.post(queryUrl,{referal:'<?php echo $gotreferal; ?>',visitId:'<?php echo $gotvisitId; ?>',referalList:'<?php echo $visitRecord->getReferallist(); ?>'},function(data) 
    { 
      $('.opiniondoclistData').html(data); 
    }); 
      document.getElementById('opiniondoclistDiv').style.display = ""; 
    } 
+0

生成的HTML看起來像什麼? – 2010-07-26 09:56:43

+0

@MilanBabuškov - 我在格式化。但我需要在後端php正確地獲取數組。當我說打印 回聲$ _POST ['referalList']在輿情名單。它只是打印陣列。沒有別的... – Hacker 2010-07-26 10:00:43

回答

2

你的問題是你正在使用PHP中的數組。

echo $ visitRecord-> getReferallist(); //返回引用數組。

當您通過echo'ing將數組轉換爲字符串時(因爲echo輸出字符串),您將獲得文本「Array」。

爲了通過電匯(通過AJAX($ .post)從javascript發送),您需要將您的推薦列表轉換爲字符串。一種方法是序列化。您可以使用序列化()函數將陣列轉換爲「可串行格式」。 www.php.net/serialize。

在AJAX請求中從PHP接收到此消息時,可以使用反序列化()函數將「可串式格式化」數組轉換回純數組。 www.php.net/unserialize。

您的代碼應改變從

$ visitRecord-> getReferallist();

的serialize($ visitRecord-> getReferallist());

然後當它收到,你應該從

$推介更改代碼= $ _ POST [ 'referalList']; //數組的串接的版本

$介=反序列化($ _ POST [ 'referalList']); //純PHP陣列

0
var sendData = 'referal=<?php echo $gotreferal; ?>&visitId=<?php echo $gotvisitId; ?>&referalList=<?php echo implode('-', $visitRecord->getReferallist()); ?>';  
$.post(queryUrl, sendData,function(data) { //etc 

然後接收腳本(除了任何必要的衛生處理):

$referalList = explode('-', $_POST['referalList']); 

不要忘了和addslashes給你所有迴盪在必要時

+0

這是如何有所作爲。 – Hacker 2010-07-26 10:03:01

+0

Apologes,誤讀。編輯解決方案。 – Jhong 2010-07-26 10:07:56

+0

...和一些更多的編輯。今天火腿手指。 – Jhong 2010-07-26 10:09:34

1

變量使用Serialize()將你的數組轉換成一個字符串,發送它,然後使用unserialize()把它返回到php中的一個數組中;

Serialize()

0

PHP將自動從查詢字符串創建一個數組變量,或發佈數據,其中包含了「[]」在名稱的末尾。例如,您可以按如下方式執行jQuery加載調用,以將數組傳遞給PHP。

$('#target').load('index.php?foo[]=a&foo[]=b'); 

在PHP端,你將有名爲foo的數組$ _GET

<?php 
echo 'I have ' . $_GET['foo'][0] . ' and ' . $_GET['foo'][1]; 
?> 

jQuery的AJAX功能,例如$ .post,$ .get和$ .ajax可以在他們的數據部分中傳遞像這樣的數組 - 只需確保在最後給變量命名爲「[]」,以便PHP知道如何處理它。

1

我認爲你可以使用json_encode()到陣列編碼爲一個字符串,jQuery將能夠讀取回爲一個JavaScript數組

編輯:對不起,我沒有正確讀取你的問題,我看到你不想在javascript中讀取數組,但在PHP中,所以可能serialize()unserialize()比json_encode()更好,假設它正確轉義以用於javascript。

+0

我覺得'json_encode'是一個數組的更好的選擇,因爲jQuery將發送它作爲一個數組,PHP將它解釋爲'$ _GET'或'$ _POST'的數組。儘管如此,這隻會將原始字符串用作值。 – strager 2010-07-27 13:25:22

0

我發現這個問題的解決方案......

使用此功能,在你的JavaScript ...

function js_array_to_php_array (a) 
{ 
    var a_php = ""; 
    var total = 0; 
    for (var key in a) 
    { 
     ++ total; 
     a_php = a_php + "s:" + 
      String(key).length + ":\"" + String(key) + "\";s:" + 
      String(a[key]).length + ":\"" + String(a[key]) + "\";"; 
    } 
    a_php = "a:" + total + ":{" + a_php + "}"; 

    return a_php; 
} 

一個是你在這個功能 通過陣列的話..你的PHP你在哪裏得到這個函數的返回陣列編寫代碼...

$my_array = unserialize(urldecode(stripslashes($_COOKIE['php_array']))); 
// print_r ($my_array); 

希望它可以幫助...

+0

hoy! Manie ..;) – Reigel 2010-08-03 03:52:37