使用ajax调用时,不会填充MySQL查询数组

时间:2013-12-11 17:22:28

标签: php jquery mysql ajax

我正在使用ajax在WordPress网站上返回sql查询的结果。基本上,有两个查询,我显示第二个查询的结果。第一个查询获取包含特定自定义字段的帖子列表。第二个查询查看这些帖子并列出具有与其关联的另一个自定义字段的帖子。现在,如果我不使用ajax并将其添加到我的页面模板中,一切正常。

<?php
    $post_ids = $wpdb->get_col( "SELECT DISTINCT post_id FROM $wpdb->postmeta WHERE meta_key = 'Make' AND meta_value='Chevrolet'" );
    // now get the food names
    $stocktypes = $wpdb->get_col( "SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = 'Model' AND post_id IN (". implode(',', array_map('absint', $post_ids) ) .")" );


    if ($stocktypes) {
        foreach ($stocktypes as $stocktype) {
            echo "<option value=\"" . $stocktype . "\">" . $stocktype . "</option>";
        }
    }
?>

当我将其添加到单独的文件并使用ajax调用它时,问题就出现了。这是我的ajax文件的内容:

<?php

    $models = $_GET['Make'];

    $post_ids = $wpdb->get_col( "SELECT DISTINCT post_id FROM $wpdb->postmeta WHERE meta_key = 'Make' AND meta_value= %s", $models );

    $stocktypes = $wpdb->get_col( "SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = 'Model' AND post_id IN (". implode(',', array_map('absint', $post_ids) ) .")" );


    if ($stocktypes) {
        foreach ($stocktypes as $stocktype) {
            echo "<option value=\"" . $stocktype . "\">" . $stocktype . "</option>";
        }
    }
?>

这是我的ajax电话:

 <script>
    $(document).ready(function(){
        $("#make").change(function() {
            $.ajax({ 
                url: "<?php bloginfo('template_url'); ?>/getModel.php", 
                data: { Make: $(this).val() },
                dataType: "html",
                type: "GET", 
                success: function(data){ 
                    $("#model").html(data); 
                } 

            }); 
        });
    });
</script>

ajax调用工作正常,因为我可以回显$ models = $ _GET ['Make'];

的结果

通过使用print_r(array_values($post_ids));,我发现第一个查询的$ post_ids数组未在我的ajax文件中填充。我唯一能想到的是wp-load.php(它允许使用WordPress函数)没有加载,但这不是问题。

1 个答案:

答案 0 :(得分:0)

问题出在第一个查询中。在我使用meta_value= %s时,我应该使用meta_value= $models

另外,正如Kevin B所指出的,我在我的ajax电话中添加了type: "GET"