繁体   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