2016-11-07 109 views
0

荫试图让插件如下因素对WP插件在线科西嘉。问题与阿贾克斯的WordPress插件

荫具有与该插件(其电子邮件列表生成器)的AJAX部分严重的困难。

这是我的.js jQuery代码是应该运行在本地主机的一些PHP代码和一个警报窗口显示成功/错误信息:

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

    var wpajax_url = document.location.protocol + '//' + document.location.host + 'wordpress_plugin_course/wp-admin/admin-ajax.php?action=plb_save_subscribtion'; 

    $('form.plb-form').bind('submit', function(){ 

     $form = $(this); 
     var form_data = $form.serialize(); 

     $.ajax({ 
      'method':'post', 
      'url':wpajax_url, 
      'data':form_data, 
      'dataType':'json', 
      'cache':false, 
      'success':function(data, textStatus){ 
       if(data.status == 1){ 
        $form[0].reset();  
        alert(data.message); 
       } else{ 
        var msg = data.message +'\r'+ data.error + '\r'; 
        $.each(data.errors,function(key,value){  
         msg += '\r'; 
         msg += '- ' + value; 
        }); 
        alert(msg);     
       } 
      }, 
      'error':function(jqXHR, textStatus, errorThrown){ 

      } 

     }); 

     return false;   
    }); 

}); 

PHP的一部分(是的,订阅新用B在这是故意的,因为我在这方面遇到了问题,并且我决定在所有情况下都坚持B)。

add_action('wp_ajax_nopriv_plb_save_subscribtion', 'plb_save_subscribtion');      
add_action('wp_ajax_plb_save_subscribtion', 'plb_save_subscribtion');    
add_action('wp_enqueue_scripts', 'plb_public_scripts');  

function plb_public_scripts(){                
    wp_register_script('profi-list-builder-js-public', plugins_url('/js/public/profi-list-builder.js', __FILE__), array('jquery'),'1.0',true); 
    wp_enqueue_script('profi-list-builder-js-public'); 
} 

荫没有显示plb_save_subscribtion功能,因为它的数百共行的代码和代码工作正常:它节省订阅新的在管理方面的订阅后,并在随后返回successs /错误消息。 json格式发送给客户端。

我所需要的jQuery现在要做的就是通过AJAX做这个帖子,并把同样的plb_save_subscribtion响应客户端进入的警告窗口。

我literaly整天都在谷歌上搜索,试图解决这个问题,但都无济于事。 Iam出于想法,所以Iam在这里张贴。这段代码有什么问题吗?如果没有,我应该在哪里寻找问题(因为代码是复制/粘贴的,应该可以正常工作,但它不会)?如果我在该函数的顶部放置一个简单的警报消息,则警报消息将显示为它应该显示的内容。但是当我在表单上按提交时,页面重新加载,我在.json中返回消息,没有警报窗口,没有ajax。有人?

+0

这不是因为你复制/粘贴代码将运行。你如何排队jQuery文件,并运行一个wp_ajax_youraction以使其适用于管理网址?如果你得到了json错误,那么你正处于错误关闭状态。 – Benoti

+0

我认为** action = plb_save_subscribetion **应该是** action = plb_save_subscription **(但也许拼写错误与动作一致)。实际上,没有服务器部分的AJAX请求问题并没有真正描述。 –

回答

0

添加在你的插件下面的代码文件

add_action('wp_enqueue_scripts', 'ajax_test_enqueue_scripts'); 

function ajax_test_enqueue_scripts() { 
    wp_enqueue_script('custom', plugins_url('/custom.js', __FILE__), array('jquery'), '1.0', true); 
    wp_localize_script('custom', 'postCustom', array(
     'ajax_url' => admin_url('admin-ajax.php')) 
    ); 

} 


function plb_save_subscribtion(){ 

    print_r($_POST['form_data']); 

} 
add_action('wp_ajax_nopriv_plb_save_subscribtion', 'plb_save_subscribtion');      
add_action('wp_ajax_plb_save_subscribtion', 'plb_save_subscribtion'); 

添加以下你的js文件(这里custom.js)

jQuery('form').bind('submit', function(){ 



     var form_data = jQuery(this).serialize(); 


     jQuery.ajax({ 
     url : postCustom.ajax_url, 
     type : 'post', 
     data : { 
      action : 'plb_save_subscribtion', 
      form_data : form_data 
     }, 
     success : function(response) {    
      alert(response); 
     } 
    });   
}); 

尝试这种方式。您可以在警报窗口中看到表单数据。