0

我有这个我无法解决的问题。部分原因是我无法用正确的术语来解释它。我是新手,很抱歉这个笨拙的问题。

下面你可以看到我的目标概述。我试图在动态下拉列表中获取所有类别 ID,第二个下拉列表基于第一个下拉列表选择,我发现一些代码在本地工作正常,但我尝试在里面magento 它不工作为什么?

这是我的代码

<tr>
                <td class="tdpadfirst">
                <label for="category" class="rightgap"><?php echo Mage::helper('marketplacepartner')->__('Product Category') ?>:</label>
                <span class="required starimp">&nbsp;&nbsp;&nbsp;&nbsp;</span>
                    </td>

                <td class="tdpadfirst">
                <select id="category" class="myinput-text required-entry widthinput" name="category" onChange="updateCategory(this.value)">
                <option value="">--Select Categories--</option>
                <?php
                include('db.php');
                $sql=mysql_query("select entity_id from catalog_category_entity where level='2';");
                while($row=mysql_fetch_array($sql)) {
                $id=$row['entity_id'];
                $data=$row['parent_id'];?>
                <!--echo '<option value="'.$entity_id.'">'.$parent_id.'</option>';-->
                <option value="<?php echo $id ?>"><?php echo $id ?></option>
                <?php  } ?>
                </select>
                <select name="city" class="city">
                <option selected="selected">--Select subcategory--</option>
                </select></td></tr>

<script type="text/javascript" src="http://ajax.googleapis.com/
ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  <script type="text/javascript">
$(document).ready(function() {
   $(".country").change(function() {
    var id=$(this).val();
    var dataString = 'id='+ id;
    $.ajax ({
    type: "POST",
    url: "ajax_city.php",
    data: dataString,
    cache: false,
    success: function(html) {
       $(".city").html(html);
    }
    });
});
});

ajax_city.php 是:

   <?php
include('db.php');
if($_POST['id']) {
   $id=$_POST['id'];
    $sql=mysql_query("select entity_id from catalog_category_entity where parent_id='$id'");
    while($row=mysql_fetch_array($sql)) {
        $id=$row['entity_id'];
        $data=$row['parent_id'];
        echo '<option value="'.$data.'">'.$id.'</option>';
    }
}

?>

db.php 是:

   <?php
$mysql_hostname = "localhost";
$mysql_user = "root";
$mysql_password = "admin";
$mysql_database = "magento16";
$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) 
or die("Opps some thing went wrong");
mysql_select_db($mysql_database, $bd) or die("Opps some thing went wrong");

?>

4

2 回答 2

0

你确定ajax文件的路径是正确的吗,我看到magento的方式有一个基本的.htaccess。通过检查在浏览器中发送的 NET 请求来检查您正在调用的 ajax 文件是否实际被调用,可能使用 firefox 中的 firebug 或 chromes 默认调试器。如果它在 magento 之外工作正常并且文件路径仍然正确并且数据没有显示,请尝试使用 mage::catalog_category 模型在 magento 中构建一个简单的模块。我希望它可以帮助.. :)

于 2013-07-17T07:27:16.650 回答
0

可以使用“它在本地工作正常但我在magento内部尝试它不工作”来指定你的意思吗?

我不是 100% 确定您是否根据您的问题做到了这一点。尝试仅用 html 替换 ajax_city.php 中的 php 代码,您可能能够隔离问题。

根据您的设置,您可能需要允许跨域访问。尝试将此代码添加到您的 ajax_city.php 页面。

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');  

在不相关的说明中,您编写 ajax_city.php 文件的方式使您容易受到 SQL 注入的攻击。假设您的 sql 中的“$id”值应该是一个整数,您可以简单地强制类型转换以防止 sql 注入。

...entity_id from catalog_category_entity where parent_id='$id'");

改变:

$id=$_POST['id'];

至:

$id=intval($_POST['id']);

希望这可以帮助!

于 2013-07-17T06:08:41.223 回答