Почему AJAX $ .post не работает в WordPress?

-2

Я убивал себя, пытаясь понять, почему $.post не работает. Я пытаюсь сделать две капли вниз.

Первый будет содержать основную категорию, а второй выпадающий список содержит подкатегории для первого раскрывающегося списка.

[MAIN CATEGORY DROP DOWN] [SUB CATEGORY DROP DOWN]

Первое падение вниз работает безупречно, но подкатегории просто не извлекают с ajax по какой-то причине, почему я не знаю..

add_shortcode( 'custom_query', 'custom_query' );
add_action( 'wp_ajax_custom_query', 'getSubCategory' );
add_action( 'wp_ajax_nopriv_custom_query', 'getSubCategory' );
function custom_query( $cat_id )
{       
    // first dropdown
    $first_dropdown = array( 'show_option_all'    => '','show_option_none'   => 'Select main category','orderby' => 'ID','order' => 'ASC','show_count' => 0,    'hide_empty' => 0, 'exclude' => 0,'echo' => 1,'selected' => 0,'child_of' => $cat_id,'hierarchical' => 1,'name' => 'chained-categories','id' => '','class' => 'postform',    'depth' => 1, 'tab_index' => 0,'taxonomy' => 'category', 'hide_if_empty' => false ); 
    wp_dropdown_categories( $first_dropdown );

    // subcategories empty but will be populated once the first main category is selected
    echo '<div id="chained-subcontainer">
            <select name="chained-subcategories" id="chained-subcategories">
                <option value="">- Select a category first -</option>
            </select>
        </div>';

    // javascript
    echo '  
        <script type="text/javascript">

            (function($)
            {
                var ajaxurl = "../../wp-admin/admin-ajax.php";
                var subdata = { action: "custom_query" };

                $("#chained-categories").change(function()
                {
                    subdata[ "chained_subcat_id" ] = $( this ).val();
                    subdata[ "chained_subcat_name" ] = $("#chained-categories option[value="+ $( this ).val() + "]").text();

                    if( $( this ).val() > 0 )
                    {
                        #this here works once the first cat is picked
                        alert($("#chained-categories option:selected").val());

                        $.post
                        (
                            ajaxurl, 
                            subdata,   
                            function( response )
                            {
                                $( "#chained-subcontainer" ).html( response );
                            }
                        );
                    } else {
                        $( "#chained-subcontainer" ).html( "<select name="chained-subcategories" id="chained-subcategories"><option value="">- Select a category first -</option></select>" );

                    }   
                });
            })(jQuery);

        </script>
    ';
}

function getSubCategory()
{
    $second_dropdown = array('show_option_all' => '', 'show_option_none' => 'Select subcategory','orderby' => 'ID', 'order' => 'ASC', 'show_count'  => 0, 'hide_empty' => 0, 'exclude' => 0, 'echo' => 1, 'selected' => 0, 'child_of' => $_POST[ 'chained_subcat_id' ], 'hierarchical' => 1, 'name'    => 'chained-subcontainer', 'id' => '', 'class'   => 'postform','depth' => 1, 'tab_index' => 0, 'taxonomy' => 'category', 'hide_if_empty' => false ); 
    wp_dropdown_categories( $second_dropdown );
}

Я знаю, что это часть $.post, которая не работает, потому что я включил оповещение для того, чтобы в любой момент, когда была выбрана любая опция, она покажет ее значение.. и она работает, пока $.post часть кода не включена.

EDIT: Итак, после предложения Дэвида, я смог проверить часть кода, в то время как все работает так, как ожидалось.. насколько работает ajax. У меня небольшая проблема.

В этой строке кода,

else {
    $("#chained-subcontainer").html("<select name="chained-subcategories" id="chained-subcategories"><option value="">Select a category first</option></select>");
}  

Если я оставлю это, код не будет работать до ajax. Если я удалю эту часть, тогда ajax правильно выберет данные.. и я не могу понять, почему.. это то, что я получаю от JSHINT " Expected ')' and instead saw 'chained'.

  • 0
    Есть ли ошибка на консоли браузера? Запрос AJAX выполняется? Каков ответ сервера? Мы не можем отладить это для вас.
  • 0
    Я понимаю ... ты на самом деле мне очень помог ... У меня остался только один вопрос, если бы ты мог взглянуть ... Я собираюсь обновить его.

1 ответ

0

Если я оставлю это, код не работает до ajax

Это потому, что у вас есть синтаксическая ошибка, поэтому ни один из JavaScript не будет работать.

Обратите внимание на выделение синтаксиса здесь, на Stack Overflow:

$( "#chained-subcontainer" ).html( "<select name="chained-subcategories" id="chained-subcategories"><option value="">- Select a category first -</option></select>" );
                                                 ^--- here

В этом случае самым простым решением является просто использование одиночных кавычек для ваших строк. Поскольку ваши строки не содержат одиночных кавычек (но имеют двойные кавычки):

$( '#chained-subcontainer' ).html( '<select name="chained-subcategories" id="chained-subcategories"><option value="">- Select a category first -</option></select>' );

Каждый раз, когда строка содержит символ кавычки, вы должны убедиться, что синтаксический анализатор не собирается интерпретировать этот символ как конец строки. Либо используя разные виды кавычек, либо "экранируя" эти символы кавычек.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню