【问题标题】:Cannot get Ajax update form to work with unserialize无法让 Ajax 更新表单与反序列化一起使用
【发布时间】:2016-09-20 22:10:31
【问题描述】:

我正在尝试组合一个表单的工作演示(包括 mysql),该表单使用 jquery 序列化表单数据和 php 检索数据,以便可以将其传递给 mysql 查询。

表单似乎正确地发布数据,但我不确定如何设置处理脚本,它看到 $_POST 来反序列化数据,以便我可以将它传递给 mysql。您可以在http://www.dottedi.biz/demo/code/ajax/serialize 看到演示。

我尝试过使用:

$data=unserialize($_POST['data']);

反序列化数据,但它返回为空。一个简单的 print_r ($_POST);从表单返回数组数据。如果您测试演示,您可以看到这一点。请问有什么建议吗?


添加信息 - script.js 文件的内容:

$(document).ready(function() {
  $('form').submit(function(evt) {
    evt.preventDefault();
    $.each(this, function() {

      var input = $(this);
      var value = input.val();
      var column = input.attr('name');
      var form = input.parents('form');
      var linked_col = form.find('#associated').attr('name');
      var linked_val = form.find('#associated').val();

      // var serializedData = $(this).serialize(); 

      $("#Status").html( "" );

      $.ajax({
        url: "update.php",
        data: {
          val: value,
          col: column,
          id: linked_col,
          id_val: linked_val
        },
        type: "POST",
        success: function(html) {
          $("#Status").html( html );
        }

      });
    });
  });
});

9/22 - 缩短 script.js

$(document).ready(function() {
  $('form').submit(function(evt) {
    evt.preventDefault();
     $.each(this, function() {

      $("#Result").html( "" );

      $.ajax({
        url: "update.php",
        data: $('form').serialize(), // works to post data
        type: "POST",
        success: function(html) {         
          $("#Result").html( html );
        }

      });
    });
  }); 
});

评论 - 我测试过,似乎使用上面的序列化发布相同的数据,而不是创建像 var serializedData = $(this).serialize() 这样的变量并发布变量,但这更短。

【问题讨论】:

  • PHP unserialize() 不是 javascript serialize() 的反面 $_POST 中的数据应该像来自一组简单的表单输入一样处理
  • 在mysql中存储一个数组需要序列化。但是将它传递给 javascript 你必须反序列化并将其解析为 JSON。

标签: php jquery mysql ajax serialization


【解决方案1】:

也许你应该

$('form').submit(function(evt) { 
 // Serialize the data in the form
var serializedData = $(this).serialize();
//send off serializedData in your ajax
 }

那么

php脚本会有

$data=json_decode($_POST['data']);

新方法

  $.ajax({
    url: "update.php",
    data: {'data': $('form').serialize()}, // works to post data
    type: "POST",
    success: function(html) {         
      $("#Result").html( html );
    }

【讨论】:

  • 好的,我知道我需要在 php 脚本中使用 json_decode 并在 script.js 中添加一个新变量,但是我的 javascript/jquery 知识有限。我该如何使用它以及我在脚本中究竟做了哪些更改才能使其正常工作?
  • 我得到序列化工作以将数据传递给处理 php 脚本,但我没有从 $data 变量中得到任何东西。 $_POST 返回一个普通数组。 # $data=json_decode($_POST['data']); # json_decode 仍在触发空白。还有另一种方法可以让它工作吗?这应该有效吗?
  • @BobM just var_dump($_POST);你得到了什么?
  • 看一下演示,你会看到var_dump ($_POST): array(3) { ["id"]=> string(1) "1" ["state"]=> string(11) "Connecticut" ["fname"]=> string(15) "Charlie Chaplin" } print_r 和 var_dump 都显示了很好的 _POST 数据,但是没有任何东西可以填充 $data 变量,我在其中找到了教程讨论的帖子.我想知道这是不是沟通不畅?
  • 我已经测试过并且可行的选项 #2 是在 $_POST 变量上创建一个 foreach 循环并以这种方式进行处理。
猜你喜欢
  • 2021-08-26
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 2018-05-09
相关资源
最近更新 更多