代码之家  ›  专栏  ›  技术社区  ›  Hacker

使用jquery发送数组

  •  0
  • Hacker  · 技术社区  · 15 年前

    我有一个变量$visitrecord->getrefereallist(),用于获取数组中医生的列表。我需要将数组发送到一个php文件,并在php文件中执行foreach操作。如何在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 = "";
        }
    
    6 回复  |  直到 15 年前
        1
  •  2
  •   Paul Dragoonis    15 年前

    您的问题是您使用的是PHP中的数组。

    echo$visitrecord->getreferecallist();//返回引用数组。

    当您通过回送(因为回送输出字符串)将数组转换为字符串时,您将得到文本“array”。

    为了通过网络发送(通过ajax($.post)从javascript发送),您需要将引用列表转换为字符串。一种方法是序列化。您可以使用 串行化 ()函数。www.php.net/serialize.

    当在ajax请求中从php接收到这个命令时,可以使用 序列化 ()函数。www.php.net/unserialize.

    您的代码应该从

    $visitrecord->获取引用列表();

    序列化($visitrecord->getReferallist());

    那么当它被收到时,你应该改变你的代码

    $referrals=$发布['referallist'] //数组的可字符串版本

    $referrals=非市场化($_post['referallist']); //纯PHP数组

        2
  •  1
  •   talelcool    15 年前

    使用serialize()将数组转换为字符串,发送它,然后使用unserialize()将其返回到PHP中的数组中;

    Serialize()

        3
  •  1
  •   ianbarker    15 年前

    我想你可以用 json_encode() 将数组编码为jquery可以作为javascript数组读取的字符串

    编辑 :抱歉,我没有正确地阅读您的问题,我发现您不想用javascript读取数组,但可能是用php读取数组。 serialize() unserialize() 比json_encode()更好,假定它可以正确地进行转义以便与javascript一起使用。

        4
  •  0
  •   Jhong    15 年前
    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']);
    

    如果需要的话,不要忘记对所有要回送的变量加斜杠。

        5
  •  0
  •   El Yobo    15 年前

    PHP将自动从查询字符串或已发布的数据中创建数组变量,该查询字符串或已发布的数据在名称末尾包含“[]”。例如,您可以执行jquery加载调用,如下所示将数组传递给php。

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

    在PHP方面,您将有一个名为foo的数组。

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

    jquery的ajax函数,例如$.post、$.get和$.ajax可以在它们的数据部分传递这样的javascript数组-只需确保在末尾用“[]”命名变量,以便php知道如何处理它。

        6
  •  0
  •   Manie    15 年前

    我找到了解决这个问题的办法…

    在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;
    }
    

    a是您在此函数中传递的数组 然后…在你的PHP中,你得到这个函数的返回数组,写下这个代码…

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

    希望有帮助…