如果提到dataType,$ .ajax将不起作用

时间:2014-07-17 09:48:54

标签: php jquery

当用户从下拉列表中选择主要类别时,我正在使用WordPress检索子类别。 所有工作都是使用ajax完成的。但问题是,如果我提到dataType到json没有任何回报,如果不是它按预期工作,我知道我收到有效的Json。

这是jQuery代码:

jQuery(document).ready(function($) {
            var select = $('#main_cat');
            select.on('change', function(){
                var temp = $('#main_cat option:selected').text();
                console.log(temp);
                var data = {
                    action: 'my_action',
                    security: '<?php echo $ajax_nonce; ?>',
                    cat: temp
                };
                $.ajax({

                    url: ajaxurl,
                    data: data,
                    type: 'post',

                    success: function(response){
                        console.log(response);    

                    }
                });
            });
        });

这是我收到的回应。它似乎是数组,但当我使用typeOf(响应)时,它显示字符串。我也尝试过instanceofArray和同样的事情。

这里的确切响应代码:如果我使用json_encode这是我收到的,但jquery仍然认为它是字符串。

[" <option>Auto mobile<\/option>"," <option>Shopping<\/option>"]

这就是我用json_encode

收到的内容
Array
(
    [0] =>  <option>Auto mobile</option>
    [1] =>  <option>Shopping</option>
)

这是PHP代码。

add_action( 'wp_ajax_my_action', 'my_action_callback' );

function my_action_callback() {

    check_ajax_referer( 'my-special-string', 'security' );


    $args = array(

        'child_of'                 => get_cat_ID($_POST['cat']),
        'orderby'                  => 'name',
        'order'                    => 'ASC',
        'hide_empty'               => 1,
        'hierarchical'             => 1,

    );


    $temp = array();
    foreach (get_categories($args) as $cat) {
        $temp[] =  " <option>$cat->cat_name</option>";

    }
    print_r($temp);


}

2 个答案:

答案 0 :(得分:1)

该回复不是JSON。看起来像PHP print_r,使用

echo json_serialize($output);

$output是您使用print_r的变量。

答案 1 :(得分:0)

我相信您在后端PHP代码中使用print_r()

datatype中使用ajax时请在后端尝试此操作:

echo json_encode($output_array);