WP AJAX API with JS file

时间:2015-02-20 作者:Luis Rock

因此,我很难将我的联系方式设置为我正在构建的主题。

它使用JqBootstrapValidation插件。

有人告诉我,这不起作用的原因是,当js通过AJAX调用时,WP没有被加载contact-me.php 文件因此,如果有人能在此基础上实现WP-ajaxapi,我将非常感激,因为我一点都不知道。

顺便说一句,JS文件工作得很好。正在验证字段,我在发送表单时收到一条成功消息。

以下是Js代码:

(function($) {

$("input,textarea").jqBootstrapValidation({
preventSubmit: true,
submitError: function($form, event, errors) {
    // additional error messages or events
},
submitSuccess: function($form, event) {
    event.preventDefault(); // prevent default submit behaviour
    // get theme path
    var stylesheet_directory_uri = ContactMe_uri.templateUrl;
    // get values from FORM
    var name = $("input#name").val();
    var email = $("input#email").val();
    var subject = $("input#subject").val();
    var message = $("textarea#message").val();
    var firstName = name; // For Success/Failure Message
    // Check for white space in name for Success/Fail message
    if (firstName.indexOf(\' \') >= 0) {
        firstName = name.split(\' \').slice(0, -1).join(\' \');
    }
    $.ajax({
        url: stylesheet_directory_uri+"/inc/contact-me.php",
        type: "POST",
        data: {
            name: name,
            subject: subject,
            email: email,
            message: message
        },
        cache: false,
        success: function() {
            // Success message
            $(\'#success\').html("<div class=\'alert alert-success\'>");
            $(\'#success > .alert-success\').html("<button type=\'button\' class=\'close\' data-dismiss=\'alert\' aria-hidden=\'true\'>&times;")
                .append("</button>");
            $(\'#success > .alert-success\')
                .append("<strong>Your message has been sent. </strong>");
            $(\'#success > .alert-success\')
                .append(\'</div>\');

            //clear all fields
            $(\'#contactForm\').trigger("reset");
        },
        error: function() {
            // Fail message
            $(\'#success\').html("<div class=\'alert alert-danger\'>");
            $(\'#success > .alert-danger\').html("<button type=\'button\' class=\'close\' data-dismiss=\'alert\' aria-hidden=\'true\'>&times;")
                .append("</button>");
            $(\'#success > .alert-danger\').append("<strong>Sorry " + firstName + ", it seems that mail server is not responding. Please try again later!");
            $(\'#success > .alert-danger\').append(\'</div>\');
            //clear all fields
            $(\'#contactForm\').trigger("reset");
        },
    })
},
filter: function() {
    return $(this).is(":visible");
},
});

$("a[data-toggle=\\"tab\\"]").click(function(e) {
e.preventDefault();
$(this).tab("show");
});  
}(jQuery)); 
/*When clicking on Full hide fail/success boxes */
jQuery(\'#name\').focus(function() {
jQuery(\'#success\').html(\'\');
}); 

1 个回复
SO网友:David Gard

目前,我假设is是后端(前端略有不同),但如果需要,它很容易在前端实现。

你这样想是对的,因为你没有使用WordPressadmin-ajax.php 文件,WordPress的所有优点都消失了。幸运的是,这很容易修复。

在继续之前,我建议您查看以下内容-

  • AJAX in Plugins - 这可能不是一个插件,但该页面仍然非常有用
  • jQuery.post() - 这将取代jQuery.ajax().error 具有.fail, 请不要从jQuery.post() 功能-

    Deprecation Notice - jqXHR。success(),jqXHR。error()和jqXHR。从jQuery 1.8开始,jQuery 1.5中引入的complete()回调方法就不再推荐了。要准备代码以便最终删除,请使用jqXHR。done(),jqXHR。fail()和jqXHR。而是始终()。

    您会注意到WP用户jQuery.post() 而不是jQuery.ajax(). 因此,您不必显式声明success 函数,因为第三个参数复制该函数。

    您还将注意到,声明的PHP没有显式路径。相反,我们添加action 关键点data 对象您将在下面的PHP中看到这是如何工作的。

    var data = {
        action:  \'my_ajax_action\',
        name:    name,
        subject: subject,
        email:   email,
        message: message
    }
    
    var jqxhr = $.post(ajaxurl, data, function(response) { // This is the \'success\' function
    
        // Success message
        $(\'#success\').html("<div class=\'alert alert-success\'>");
        $(\'#success > .alert-success\').html("<button type=\'button\' class=\'close\' data-dismiss=\'alert\' aria-hidden=\'true\'>&times;")
            .append("</button>");
        $(\'#success > .alert-success\')
            .append("<strong>Your message has been sent. </strong>");
        $(\'#success > .alert-success\')
            .append(\'</div>\');
        
        //clear all fields
        $(\'#contactForm\').trigger("reset");
        
    }).fail(function(){
        
        // Fail message
        $(\'#success\').html("<div class=\'alert alert-danger\'>");
        $(\'#success > .alert-danger\').html("<button type=\'button\' class=\'close\' data-dismiss=\'alert\' aria-hidden=\'true\'>&times;")
            .append("</button>");
        $(\'#success > .alert-danger\').append("<strong>Sorry " + firstName + ", it seems that mail server is not responding. Please try again later!");
        $(\'#success > .alert-danger\').append(\'</div>\');
        //clear all fields
        $(\'#contactForm\').trigger("reset");
        
    });
    
    你的PHP现在也必须略有不同。您可以将其放置在functions.php, 或函数包含的任何独立PHP文件。php。

    基本上,您可以添加一个操作来在函数中执行代码,如下所示。

    add_action(\'wp_ajax_my_ajax_action\', \'my_ajax_action_callback\');
    function my_ajax_action_callback() {
        
        echo \'It works!\';
        wp_die();   // This is required for a proper result
        
    }
    

结束

相关推荐

插件中的AJAX调用返回的比JSON更多

我有一个插件tat extendeds Gravity Forms,由一个PHP文件和一个JS文件组成。可以在以下位置找到PHP文件:http://pastebin.com/VUX5AfLPJS文件可在此处找到:http://pastebin.com/CTjQEKzY我试图使用带有回调的WP-AJAX返回json编码的结果来填充我的重力表单。我遇到的问题是,我没有将JSON编码的对象返回到AJAX回调,而是得到了整个injuryFilter();来自的函数<script> 到</scri