【问题标题】:Wordpress front end AjaxWordpress 前端 Ajax
【发布时间】:2018-01-05 12:35:59
【问题描述】:

我目前正在开发一个插件来呈现它自己的页面,以便管理员的表单提交发生在管理面板之外。我想在表单提交上创建即时更新,就像您在 Wordpress 管理面板中看到的那样。

我已经阅读了一百万篇教程,但我似乎无法理解,我希望有人可以花时间向我解释,使用这个例子:

我想要一个表格来添加联系人。 该表格要求提供“联系人姓名”、“联系人类型”、“联系人号码”和“工作 ID”的隐藏字段。我想为此工作加载数据库中已有的所有联系人,并希望在您添加新联系人时刷新它。

先谢谢了,我真的需要帮助!

JS:

    jQuery(document).on("click", "#submitcontact", function(e){

    e.preventDefault();
    jQuery.ajax({
        url: MyAjax.ajaxurl,
        type: "POST",
        data: {
            action: "tm_add_contact",
            contactname: jQuery("#contactname").val(),
            contacttype: jQuery("#contacttype").val(),
            contact: jQuery("#contact").val(),
            jobnumber: jQuery("#jobnumber").val()
        },
        success: function(data){
           alert("success " + data);
        },
        error: function(e){
             alert("error " + e);
        }
    });

});

表格:

  <button type="button" class="btn btn-success pull-right" data-toggle="popover" title="Add Contact" data-placement="left" data-html='true' data-content='
                            <form>
                              <div class="form-group">
                                <label for="contactname">Name</label>
                                <input type="text" class="form-control" id="contactname" name="contactname" placeholder="Jane Doe">
                              </div>
                              <div class="form-group">
                                <label for="contacttype">Type</label>
                                <select class="form-control" id="contacttype" name="contacttype">
                                  <option>Landline</option>
                                  <option>Mobile</option>
                                  <option>Buisness</option>
                                  <option>Email</option>
                                  <option>Fax</option>
                                </select>
                              </div>
                              <div class="form-group">
                                <label for="contact">Contact</label>
                                <input type="text" class="form-control" id="contact" name=contact placeholder="">
                                <input type="hidden" id="jobnumber" name="jobnumber" value="<?php echo $job->JobNumber ?>">
                              </div>
                              <button type="button" id="submitcontact" name="submitcontact" class="btn btn-default"><i class="fa fa-plus" aria-hidden="true"></i> Add Contact</button>
                            </form>   
                                '><i class="fa fa-plus" aria-hidden="true"></i> Add Contact</button>

功能:

    function tm_add_contact(){

$contactname = $_POST['contactname'];
$contacttype = $_POST['contacttype'];
$contact = $_POST['contact'];
$jobnumber = $_POST['jobnumber'];
$date = current_time( 'mysql' );
global $wpdb;
$table_name = $wpdb->prefix . 'trademanager_job_contacts';
$wpdb->insert(
    $table_name,
    array(
        'JobNumber' => $jobnumber,
        'ContactName' => $contactname,
        'Type' => $contacttype,
        'Contact' => $contact,
        'DateAdded' => $date
    ),
    array(
        '%s'
    )
);

echo "HELLO WORLD!!!";

die();
return true;
}
//
add_action('tm_ajax', 'tm_add_contact'); // Call when user logged in
add_action('tm_ajax', 'tm_add_contact'); // Call when user in not logged in

更新:

我在上面使用了错误的操作和错误的名称。该表单现在可以使用,但是我仍然不明白如何在不刷新页面的情况下显示提交结果...

【问题讨论】:

    标签: php ajax wordpress plugins frontend


    【解决方案1】:

    尝试使用 ajaxForm jquery 插件。 http://malsup.com/jquery/form/#ajaxForm

    之后使用回调:

    function showResponse(response){
          jQuery('.datalist > tbody').prepend(response);
    }
    

    注意:使用表格在后端相应地格式化响应。您甚至可以在提交成功后清除表单。

    或者没有ajaxForm插件:

    jQuery('form').on('submit', function(event){
        event.preventDefault();
        var data = $(this).serialize();
        var form = $(this);
       // than use $.ajax
    
        $.post(url,data,function(response){            
            jQuery('.your_table > tbody').append(response);
            //using previously defined form variable, because this is now post object
            form[0].reset();
    
        });
       // or use: return false
    });
    

    对于数据库结果使用

    $db_contacts = $wpdb->get_results('SELECT * FROM your_table ORDER BY id');
    

    然后:

    foreach($db_contacts as $contact){
       echo $contact->contactname;
    }
    

    【讨论】:

    • 感谢 Roman,但我尽量避免使用其他插件,而且我非常有兴趣了解它是如何工作的。
    • 您好,目前正在通过电话回答,所以我无法编写所有代码。无论如何,希望它有所帮助。如果您希望一次定义所有 POST 变量,请使用 extract()。然后 $varname ;) 只是一个提示。
    • 我看到了错误的操作,但我认为您正在使用您的自定义操作。您必须更改按钮类型提交才能工作,然后连接到表单上的 onsubmit 事件。然后在响应时,您只需返回缺少的部分并附加它。成功插入后返回发布的记录。
    • 太棒了,感谢罗曼的帮助。我确实赞成您的回答,但显然我太新了...您对提交具有相同名称/ ID的多个输入的表单有什么建议吗?名称,例如是一个数组,所以 input_name[] ...
    • 不得不问。代码有效吗?是的,您可以这样使用它... Input_name[contactname]。 ID 属性必须是唯一的,因此避免使用过多的 id,而是使用类 ( .class_name )。然后根据表单方法(post、get)在 PHP 中捕获它。 $_REQUEST[输入名称]。该方法更清洁。如果只使用 input_name[] (数组数据类型),则只能获得 0,1,2,3 之类的索引
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 2016-12-23
    相关资源
    最近更新 更多