简体   繁体   English

将javascript变量传递给php函数并正确引用

[英]passing a javascript variable to a php function and quoting it correctly

Im using Zend Framework ..in one of my phtml file's i have this code 我在我的一个phtml文件中使用Zend Framework ..我有此代码

<script>
 function foobar(id,type){
   var idarray =  <?php AppNamespace_General::getparentids( ?>id, type<?php ) ?>; // here  the id and type are from js
//the php function returns a json array to the js variable
 ......
  location.href = baseurl +'/somepage/id/'+id;
   }      

How can i correctly pass the js elements to the php function 我如何正确地将js元素传递给php函数

The php function(Already thought of doing it via ajax..its quite complex) php函数(已经考虑过通过ajax..its来完成它)

public static function getparentids($id, $type, $elmarray = '') {

        if (empty($elmarray)) { //avoiding redeclaration of array
            $elmarray = array();
        }
        switch (strtolower($type)) {
            case 'group':
            case 'product':
            case 'specification':

                $gp_handler = new PackAssist_Model_DbTable_Groups();
                $q = "SELECT * FROM t_groups WHERE group_id = $id";
                $sql = $gp_handler->getAdapter()->query($q);

                break;
            case 'part':
                $pt_handler = new PackAssist_Model_DbTable_Parts();
                $q = "SELECT * FROM t_parts WHERE part_id = $id";
                $sql = $pt_handler->getAdapter()->query($q);
                break;
        }
        $result = $sql->fetchAll();
        $i = 0;
        if (count($result) > 0) {
            foreach ($result as $row) {
                if (isset($row['group_parent_id']) && $row['group_parent_id'] != 0) {
                    if (in_array($row['group_id'], $elmarray)) {
                        $e = $row['group_parent_id'];
                    } else if ($row['group_parent_id'] != 0) {
                        $e = $row['group_id'];
                    }
                } else if (isset($row['part_group_id'])) {
                    $e = $row['part_group_id'];
                } else if ($row['group_parent_id'] == 0) {
                    break;
                }
                if (isset($e) && !empty($e)) {
                    array_push($elmarray, $e);
                }
                self::getparentids($e, 'group', $elmarray);
                $i++;
            }
        } else {
            array_push($elmarray, $id);
        }
        array_pop($elmarray); //removing the group of super parent group which we dont need

        if ($i == 0) { // just encode the array only once
            echo json_encode(array_reverse($elmarray));
        }
    }

If you use jQuery, you can do the following to execute the JSON request: 如果使用jQuery,则可以执行以下操作来执行JSON请求:

$.ajax({
    type: 'GET',
    url: '/path/to/script.php',
    data: '{ id: '+id+', type: '+type+' }',
    contentType: 'application/json',
    dataType: 'json',
    success: function(data) {
         dataObject = JSON.parse(data);
         // process data
    },
        error: function(e) {
            console.log(e.message);
        }
});

You can use your existing PHP code with this solution. 您可以将现有的PHP代码与此解决方案一起使用。 The url you point to would just have to print the JSON result, as you are currently doing in getparentids() . 您指向的url只需要打印JSON结果,就像您当前在getparentids()所做的getparentids()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM