在插件中使用AJAX提交表单-真的很困惑

时间:2011-10-15 作者:dkmojo

在使用所有Wordpress ajax挂钩和函数时遇到一些问题。

正在阅读此帖子:5 Tips for Using Ajax in Wordpress

但在尝试了所有代码并将其应用于Ajax表单之后,他感到困惑。

我从我的插件类调用了一个函数,以响应单个帖子页面上的from,让用户“晕倒”。表格打印得很好。以下是表单代码:

//the html form for the front end
function ds_swoons_form(){
global $post, $current_user;
get_currentuserinfo();

    $form = \'<div id="swoon-response">\';
    $form .= \'</div>\';

    $form .= \'<form id="entry_swoon_form" name="entry_swoon_form" action="" method="POST">\';
        $form .= \'<input type="hidden" name="ds_postid" value="\'.$post->ID.\'" />\';
        $form .= \'<input type="hidden" name="ds_userid" value="\'.$current_user->ID.\'" />\';
        $form .= \'<input type="submit" value="Swoon" class="swoon-submit" />\';
    $form .= \'</form>\';

return $form;
}//end ds_swoons_form
我的排队:

wp_enqueue_script(\'json-form\');

// embed the javascript file that makes the swoons AJAX request
wp_enqueue_script( \'swoon_ajax_request\', plugins_url(\'ds-swoons/js/swoon-ajax-form.js\'), array( \'jquery\' ) );

// declare the URL to the file that handles the AJAX request (wp-admin/admin-ajax.php)
wp_localize_script( \'swoon_ajax_request\', \'SwoonAjax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );

//add the AJAX action
add_action( \'wp_ajax_swoons_submit_action\', array(\'DS_Swoons\',\'ds_ajax_swoons_form_submit\') );
和我的javascript:

jQuery(\'#entry_swoon_form\').ajaxForm({
target: \'#swoon-response\',
dataType: \'html\',
data: {
       action: \'swoons_submit_action\'
      },
url: SwoonAjax.ajaxurl,
success : function(responseText) {      
    jQuery(\'#swoon-response\').html(\'Swooned!\');
}
});
谈到AJAX,我是一个新手,所以我可能离这太远了。我读的这篇文章很好,直到最后,它显示了一个ajaxForm请求示例,我迷路了。

ajax表单函数从不运行,页面只是重新加载。所以我猜我的一个排队函数是不正确的。

Thanx提前。

编辑---------------------------------------------新建jQuery。发布方法代码-但仍不起作用

jQuery(document).ready(function(){
jQuery(\'.swoon-submit\').click(function(){
    jQuery.post(
        // see tip #1 for how we declare global javascript variables
        SwoonAjax.ajaxurl,
        {
            // here we declare the parameters to send along with the request
            // this means the following action hooks will be fired:
            // wp_ajax_nopriv_myajax-submit and wp_ajax_myajax-submit
            action : \'swoons_submit_action\',
            //nonce for validation
            //swoonNonce : SwoonAjax.swoonNonce,
            // other parameters can be added along with "action"
            postid : SwoonAjax.postid,
            userid : SwoonAjax.userid
        },
        function( response ) {
            alert( response );
        }
    );
});
console.log(SwoonAjax.ajaxurl)
});
我确实在FireBug中很快就出现了错误,但在请求结束之前,我看不到发生了什么。并且在之后没有错误。post已运行。数据库中没有更新数据,所以我知道它不会被触发。

Thanx公司

编辑2-----------------------------------------------------------------

我已获得要提交的表单,它使用以下代码更新DB:

jQuery(document).ready(function(){
jQuery(\'.swoon-submit\').click(function(){
    var $form = $( \'form#entry_swoon_form\' ),
        postid = $form.find( \'input[name="ds_postid"]\' ).val(),
        userid = $form.find( \'input[name="ds_userid"]\' ).val();
    jQuery.post(
        // see tip #1 for how we declare global javascript variables
        SwoonAjax.ajaxurl,
        {
            // here we declare the parameters to send along with the request
            // this means the following action hooks will be fired:
            // wp_ajax_nopriv_myajax-submit and wp_ajax_myajax-submit
            action : \'swoons_submit_action\',
            //nonce for validation
            //swoonNonce : SwoonAjax.swoonNonce,
            // other parameters can be added along with "action"
            ds_postid: postid,
            ds_userid: userid

        },
        function( response ) {
            alert( response );
        }
    );
    return false;
});
但是:我似乎无法获取要发送到PHP函数以插入DB的表单字段值(隐藏)。信息在Firebug控制台中被发送,但没有信息到达PHP函数。我认为这与我如何将字段发送到PHP函数有关,但我不确定。Thanx!

2 个回复
最合适的回答,由SO网友:Rutwick Gangurde 整理而成

您可以检查的内容:

查看页面源代码,并查找js 文件,是否包含,以及它们的顺序是否正确使用console.log(SwoonAjax.ajaxurl) 检查您在js 文件Console 选项卡,然后尝试启动AJAX请求。您将在此处看到处理过程和错误(如果有)jquery.post 方法。这更容易这些检查将帮助您确定问题。

快速提示:改变plugins_url(\'ds-swoons/js/swoon-ajax-form.js\')plugins_url(\'js/swoon-ajax-form.js\', __FILE__), 这将为您提供正确的插件文件夹。

SO网友:Tareq

当您使用此函数绑定WordPress ajax时add_action( \'wp_ajax_swoons_submit_action\', array(\'DS_Swoons\',\'ds_ajax_swoons_form_submit\') );, 然后需要传递一个名为swoons_submit_action. 否则,WordPress管理ajax。php将拒绝它。

您介意使用此代码段提交数据吗?

$(\'#entry_swoon_form\').submit(functions() {
    var data = $(this).serialize();
    $.ajax({
        type: \'post\',
        url: ajaxurl,
        dataType: \'json\',
        data: data + \'&action=swoons_submit_action\',
        cache: false,
        success: function(response){
            console.log(response);
        }
    }); 
});

结束

相关推荐

通过AJAX加载页面并显示标题

一次小规模的、可能很简单的咨询。我通过Ajax加载页面,如下所示:jQuery(\"div.menu a\").addClass(\"ajax\"); var hash = window.location.hash.substr(1); var href = jQuery(\'.ajax\').each(function(){ var href = jQuery(this).attr(\'href\'); if(hash==href.substr(