使用绝对URL调用管理员AJAX?相对URL分隔符(前端AJAX)

时间:2014-12-22 作者:rand_user91

希望有一个简单的方法来做到这一点/我做错了一件可怕的事:我试图简单地显示一个帖子标题列表。当用户单击标题时,它将使用ajax将该标题的内容显示在同一页面上以前为空的div中。

然而,如果我切换永久链接等,或者有一篇文章的url只有几个目录深度(即:site.com/dir1/dir2/dir3/page或site.com/dir1/page),它将无法正常工作。它将只工作,如果我有网站。com?p=23

由于我的ajax请求中存在此相对url:

jQuery(document).ready(function($){

//whenever a title is clicked on: run this request
$(\'.get_post\').click(function(e){

    e.preventDefault();

    $portfolioPostId = $(this).data(\'postid\');  

    $.ajax({
        type: \'GET\',
        url: \'../wp-admin/admin-ajax.php\',  //WON\'T LOAD on any url that ISN\'T like this format: site.com/?p=123
        data: {
            action: \'my_post\',
            postid: $portfolioPostId
        },
        success: function(data){

            $(\'#well\').html(\' \');
            $(\'#well\').html(data);




        },
        error: function(XMLHttpRequest, textStatus, errorThrown){

            console.log(errorThrown) + \'\\n\';

        }

    });


});


});
因此url: \'/wp-admin/admin-ajax.php\', 如何使用绝对URL?还是有更好的办法?

EDIT: SOLUTION TO MY ISSUE:

多亏了Rarst的回答,我才找到了传递绝对URL的方法。

在将脚本排队的php文件中,我还通过一个名为psAjax_object 包含的绝对URLadmin-ajax.php

function frontend_js(){

    wp_enqueue_script(\'shuffle_ajax\', plugins_url( NAME . \'/public/js/portfolio_grid_ajax.js\'), array(\'jquery\'), \'\', true );

    //creates the property for the \'psAjax_object\'
    $localizedArray = array(\'ajax_url\' => admin_url(\'admin-ajax.php\'));

    //allows my portfolio_grid_ajax.js file to access \'psAjax_object\'
    wp_localize_script(\'shuffle_ajax\', \'psAjax_object\', $localizedArray);

}
add_action(\'wp_enqueue_scripts\', \'frontend_js\');
然后在我的js文件中,我可以通过键入psAjax_object.ajax_url

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

通常的做法是在PHP端生成URL(admin_url() ) 并通过本地化功能将其提供给脚本(wp_localize_script() ). 它记录在Codex中Ajax on the Viewer-Facing Side.

结束

相关推荐

How to HTML5 FormData Ajax

如何在wordpress ajax中使用FormData?我正在将文件和字符串附加到formdata。 var formdata = new FormData(); formdata.append(\'name\', \'This is Name\') $.ajax({ url: \'admin-ajax.php\', type: \'POST\', data: {\'action\':