2010-07-26 88 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