簡體   English   中英

使用Ajax(wordpress)將Jquery的表單發送到PHP

[英]Send a form from Jquery to PHP with ajax (wordpress)

我有一個javascript文件序列化並將表單發送到php函數:

function call_ajax(){


var data2 = jQuery('#newIdeaForm').serialize(); // <--- Important

jQuery.ajax({
    type: 'POST',
    url: myAjax.ajaxurl,
    data: ({action : 'savedata',data : data2}),
    success: function() {


        alert(data2);


    }
});

};

問題是我不知道如何在此php函數中接收此表單:

function savedata(){



$my_post = array(
            'post_title'    => 'data.name',
            'post_content'  => 'data.idea',
            'post_status'   => 'publish',
            'post_author'   => $user_id,
            );
        wp_insert_post($my_post);

        die();
    }

表單的某些字段是'name'和'idea',我知道var data2接收了序列化的表單,但是不知道如何將這種表單放入php函數中。

另一個問題:在javascript文件的警報事件中,它會警報序列化的表單,我如何才能反序列化此表單以僅警報名稱字段?

這是如何在Wordpress中不使用AJAX的主要示例。

首先,您需要了解wordpress提供的操作。 為此,我們將同時使用noprivgeneric.

add_action('wp_ajax_nopriv_savedata', 'my_ajax_handler');
add_action('wp_ajax_savedata', 'my_ajax_handler');

現在,我們需要定義my_ajax_handler()函數並將其配置為僅解析我們發送的ajax請求(稍后會詳細介紹)

function my_ajax_handler(){
    switch($_REQUEST['fn']):
        case 'savedata' : 
            echo my_ajax_save_form($_REQUEST['data']);
            break;
    endswitch;
}

然后,我們需要定義my_ajax_save_form()函數,以便觸發實際的WP Post提交。

function my_ajax_save_form($arr){
    $post_vars = array();
    $data = parse_str($arr, $params);
    $my_post = array(
        'post_title'    => $data['name'],
        'post_content'  => $data['idea'],
        'post_status'   => 'publish',
        'post_author'   => $user_id, //where did this come from?
        );
    if(wp_insert_post($my_post)) return true;
    return false;
}

上面最$data = parse_str($_REQUEST, $params);$data = parse_str($_REQUEST, $params); 這用於采取序列化的jQuery形式var1=a&var2=b .... etc,並將其轉換為數組,然后可以在其中提取變量。 如果成功發布,該函數將返回true,否則返回false。 最后,您需要更新ajax函數以提供要switched()的新fn參數。

jQuery.ajax({
    type: 'POST',
    url: ajaxurl, //wordpres supplies this global variable. use it.
    data: ({fn: 'savedata', action : 'savedata',data : data2}),
    success: function(resp) {
        if(!resp){ alert ('Failed!')}else{ alert(data2) }
    }
});

需要注意的是,在發出ajax請求時,WP將action參數保留為add_action()的值,這就是為什么將其如此命名的原因。 如果要在javascript更改action value ,請確保根據需要更新add_action代碼。

serialize()將生成一個表單編碼的字符串,如下所示:

name=foo&email=foo@bar.com&age=86

如果您將對象傳遞給data jQuery會默認將其轉換為這種格式。

因此,將序列化和對象混合會很棘手,因此最好堅持使用一種方法或另一種方法。

嘗試這個:

var data2 = jQuery('#newIdeaForm').serialize()
jQuery.ajax({
    type: 'POST',
    url: myAjax.ajaxurl,
    data: data2 + '&action=savedata',
    success: function() {
        .....

    }
});

現在,您可以使用$_POST['fieldName']訪問所有表單name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM