使用ajax和php保存表单


Save a form with ajax and php

提交表单时,如何将任何带有ajax的$_Post['']传递给php函数?

该函数使用AJAX,但无法接收帖子的值。我进行了测试,警报返回null。

我正在使用wordpress。

window.onload=function(){
jQuery('#newIdeaForm').submit(function(events){
    call_ajax(events);
    events.preventDefault();    
    }); 

  };    
function call_ajax(){
var name = $("#name").val(); 
jQuery.ajax({
    type: 'POST',
    url: myAjax.ajaxurl,
    data: {action : 'savedata'},
    success: function(response) {

        var json = jQuery.parseJSON(response); 
        alert(json.nome);

    }
});
 };
function savedata(){
$name =  $_POST['name'];
$my_post = array(
            'post_title'    => 'teste',
            'post_content'  => 'teste',
            'post_status'   => 'publish',
            'post_author'   => $user_id,
            );
        wp_insert_post($my_post);
        $callback = array('name' =>'teste','title'=>'teste','idea'=>'teste','nome' => $name);
        $myJson = json_encode($callback);
        echo ($myJson);
        die();
    }

编辑

伙计,我试过这样:

 function call_ajax(){ 
 var serializedForm = jQuery('#newIdeaForm').serialize(); 
 serializedForm.action = 'savedata'; 
 jQuery.ajax({ 
 type: 'POST', 
 url: myAjax.ajaxurl, 
 data: serializedForm, 
 success: function(data) { 
 alert(data); 
 } 
 }); 

但当我通过浏览器调试时,它似乎没有添加任何类似操作的内容,所以它没有转到php函数,有人可以帮助我吗?

在ajax调用中,您传递的数据被转换为action=savedata,但在PHP中,您试图从POST数据中获取"name"。使用ajax请求时,表单数据不会自动发送,因此您需要手动发送,如下所示:

jQuery.ajax({
  type: 'POST',
  url: myAjax.ajaxurl,
  data: {action: 'savedata', name: name},
  sucess: ...

或者使用.serialize()jQuery函数,它将自动为您序列化表单中的数据(然后您可以将其作为数据参数提供)。

如果这就是您正在执行的,我找不到您发布名为"name"的密钥。

function call_ajax(){
  var name = $("#name").val(); 
  jQuery.ajax({
     type: 'POST',
     url: myAjax.ajaxurl,
     data: {action : 'savedata', name: 'namevalue'},
     success: function(response) {
              var json = jQuery.parseJSON(response); 
              alert(json.nome);
     }
  });
};

还可以看看:

jQuery.ajax和jQuery.post

希望这能奏效。让我知道进展如何。

尝试序列化数据并提供类似的内容类型"application/json;charset=utf-8"

 var url="@Url.Action("action","Controller")";
 var jsonSerialized=JSON.stringify(data);
 $.ajax({
         type: "POST",
         url: url,
         dataType: "json",
         contentType: "application/json; charset=utf-8",
         data: jsonSerialized,
         success: function (result) {
              alert(result);
        }
});