【问题标题】:Save a form with ajax and php使用 ajax 和 php 保存表单
【发布时间】:2013-12-05 02:36:49
【问题描述】:

提交表单时,如何将任何带有 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函数,任何人都可以帮助我吗?

【问题讨论】:

  • 试试alert(response.nome);
  • 你在php中调用savedata()吗?还有,设置dataType:'json'...就不用parseJSON
  • 如果我使用 dataType :'json' 响应是否已经被解析?

标签: php jquery ajax wordpress forms


【解决方案1】:

在 ajax 调用中,您传递的是转换为 action=savedata 的数据,但在 PHP 中,您试图从 POST 数据中获取“名称”。使用您的 ajax 请求,表单数据不会自动发送,因此您需要像这样手动发送:

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

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

【讨论】:

  • 如果我使用序列化,我如何发送序列化的表单?像这样?数据:{action:'savedata',表单:serializedForm}?
  • 你给的方式会起作用,只要你知道要从 php 访问数据,你需要使用类似 $_REQUEST['form']['name'] 的东西,或者你可以创建序列化表单,然后在发送数据之前执行 serializedForm.action = 'savedata' 。 (并且只使用 serializedForm 作为数据选项)。
  • 听起来不错,我现在就试试!
  • 伙计,我试过这样:function call_ajax(){ var serializedForm = jQuery('#newIdeaForm').serialize(); serializedForm.action = '保存数据'; jQuery.ajax({ type: 'POST', url: myAjax.ajaxurl, data: serializedForm, success: function(data) { alert(data); } });但是当我通过浏览器调试时,它似乎没有添加任何类似动作的东西,所以它没有转到 php 函数。
【解决方案2】:

如果这是您正在执行的操作,我找不到您发布名为“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.ajaxjQuery.post

希望这可行。告诉我进展如何。

【讨论】:

  • 伙计,我还没试过,因为我意识到序列化表单是最好的选择,现在我正在尝试发现如何调用 acion 'savedata' 并传递序列化表单.
【解决方案3】:

尝试序列化您的数据并提供内容类型“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);
        }
});

【讨论】:

  • for url in url assign var url="@Url.Action("action","Controller")";
  • 对不起,我不明白这一点。你能说得更具体一点吗?
  • 其中 url 是你的 php 函数的 url
猜你喜欢
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
相关资源
最近更新 更多