AJAX调用仅从查询返回100个结果

时间:2013-02-27 作者:phoat

我有一个AJAX调用来填充下拉列表:

function get_select_companies()
{
    var t_id = $(\'select#select-product_types\').val();
    if( t_id == -1 )
    {
       $(\'#ajax-loader\').hide();
       $(\'#select-manufacturers\').hide();
    }
    else
    {
    $(\'#ajax-loader\').show();
        $(\'#select-manufacturers\').hide();
        $(\'#select-manufacturers option\').remove();

    jQuery.ajax(
        {
            url:     \'/wp-admin/admin-ajax.php\',
            type:    \'POST\', 
        data:    (
            { 
            action:         \'px_get_select_companies\', 
            type_id:        t_id 
            }),
                dataType: \'JSON\',
        success: function(data)
                {
            $(\'#select-manufacturers\').append(data);
            $(\'#ajax-loader\').hide();
            $(\'#select-manufacturers\').show();       
        }
        });
    }
}
然后在我的函数中有这个php函数。php文件

function px_get_select_companies()
{
$args = array(
    \'post_type\'     => \'products\',
    \'posts_per_page\' => -1,
    \'tax_query\' => array(
        \'relation\' => \'AND\',
        array(
            \'taxonomy\' => \'product_types\',
            \'field\' => \'id\',
            \'terms\' => array( $_POST[\'type_id\'] )
        ),
    )
);

$query = new WP_Query( $args );

while( $query->have_posts() ) : $query->the_post();
    if( $query->post->ID != 1 ) :
        $terms[] = get_the_terms( $query->post->ID, \'manufacturers\' );
    endif;
endwhile;

foreach( $terms as $term ) :
    foreach( $term as $ID ) :
        $term_IDs[] = $ID->term_id;
    endforeach;
endforeach;

$term_IDs = array_unique( $term_IDs );

$output = \'<option value="0" selected="selected">--- Επέλεξε Εταιρεία ---</option>\';

foreach( $term_IDs as $ID ) :
    $term = get_term_by( \'id\', $ID, \'manufacturers\' );
    $output .= \'<option value="\' . $term->term_id . \'">\' . $term->name . \'</option>\';
endforeach;

wp_reset_postdata();

$output=json_encode($output);

if(is_array($output)){
    print_r($output);   
}
else
{
    echo $output;
}
die;
}
问题是我得到了一个无休止的旋转器,因为它不会返回任何结果。如果我将posts\\u per\\u page更改为100或更少,它将按预期工作。有人知道它为什么这样做吗?

谢谢

1 个回复
SO网友:Mark Kaplun

正如otto在他的评论中所暗示的那样,您的代码执行时间可能大于中设置的最大php执行时间max_execution_time php中的配置指令。ini,通常为30秒。

您可以在php中更改该指令。ini或。htaccess,但这只会产生一个新问题,因为用户必须等待很长时间才能加载数据。30秒通常是任何事情都无法接受的响应时间。

在任何情况下,即使从用户体验的角度来看,下拉列表中的100项也是非常多的。您可能需要重新考虑GUI。

结束

相关推荐

使用AJAX前端的最佳方式是什么?

问题是,使用管理ajax,哪种方法是使用ajax创建主题的最佳/最简单的方法。php或正常。我这样问是因为我看到使用管理ajax会变得复杂。php,并使用jquery插件来启用浏览器历史记录。你觉得呢?对不起我的英语!!!