【问题标题】:send JSON or array to submit POST (jQuery -> PHP)发送 JSON 或数组以提交 POST (jQuery -> PHP)
【发布时间】:2017-12-25 21:18:44
【问题描述】:

早上好。 我被这件事困住了: 我正在做一个表单(通过提交按钮,发布将信息发送到其他页面),动态用户可以使用按钮添加一些其他表单组。 好的,这很容易。 但是用户正在制作一些名为“DPT”(工作内容)的东西,它在我的数据库中有一个表,并且还有一个“功能”(要做的事情)表。一个 DPT 可以有一个或多个函数。

Function              
---------
id int(4) AI
title VARCHAR(64) NOT NULL
description VARCHAR(256)
dpt int(4) --> FK
      | 1..*
      |
      V 1
DPT
-----
id
name
(...)

所以我有一个<div>,我用 jQuery 对它进行了扩充,以便在其中制作一个面板和表单。 我为什么这样做?因为如果一个 DPT 可以有一个或多个函数,我必须存储我正在创建的当前函数的 ID。 然后我有一个添加更多功能的按钮,但我必须存储功能的ID以及它的标题和描述。

因此,使用 jQuery,我可以在“添加功能”按钮之前动态添加一个新表单... 我的想法是创建一个 JSON 并通过 PHP 发送它,但不知道我必须将信息发送到哪里或返回到哪里......

我在这里告诉你我做这件事的重要代码:

<div id="initialFunction" class="panel panel-default panel-body">
<?php 
 $nextID = mysqli_fetch_assoc(mysqli_query($con,"SELECT MAX(id_funcion) as siguiente_id from funcion"))['siguiente_id'];
?>
 <button class="button btn-danger" type="button">
  <span class="fa fa-minus">
  </span>
 </button>
</div>

<script>

var nextId = <?php echo $nextID?> 
var arrayToPass = {}
$(function(){
    $("#initialFunction").html('<div class="form-group">'+
            '<label>Función a desarrollar <sup style="color:red">*</sup></label>'+
            '<input class="form-control" name="funcion" type="text" placeholder="Función a desarrollar" maxlength="200" required>'+
        '</div>'+
        '<div class="form-group">'+
            '<label>Tarea principal en esta función <sup style="color:red">*</sup></label>'+
            '<textarea class="form-control" name="tarea" placeholder="Enumere las funciones de su puesto de trabajo comenzando por las más representativas, así como las tareas necesarias para el cumplimiento de las mismas" rows="3" required></textarea>'+
        '</div>');
});

$("#bttn-add").click(function(){
    $("#bttn-add-function").before(
        '<div class="form-group">'+
            '<label>Función a desarrollar <sup style="color:red">*</sup></label>'+
            '<input class="form-control" name="funcion" type="text" placeholder="Función a desarrollar" maxlength="200" required>'+
        '</div>'+
        '<div class="form-group">'+
            '<label>Tarea principal en esta función <sup style="color:red">*</sup></label>'+
            '<textarea class="form-control" name="tarea" placeholder="Enumere las funciones de su puesto de trabajo comenzando por las más representativas, así como las tareas necesarias para el cumplimiento de las mismas" rows="3" required></textarea>'+
        '</div>');
        nextId++;

});

当我点击提交按钮并通过 POST 传递它时,我可以返回一个数组/json 吗? 类似:

$("#guardar_dpt").click(function(){
    return json_object
} )

?

我向您展示 我在做什么。 还有整个表格:

【问题讨论】:

  • 听起来你想使用Ajax。您也可以使用较短的形式:$.post()
  • @MagnusEriksson 但所有其他信息都存储在一个表单中。如何将数组传递给表单?只有ajax可以发送json,不是吗?或者当我按下提交按钮时,我可以做一个 Ajax 帖子并发送表单吗?
  • @SumanDey 以某种方式发送数组/json 和表单的其他信息
  • 您可以使用 Ajax 发送您想要的任何数据。发布完整的表单非常容易,特别是因为您已经在使用 jQuery。请做一些研究并阅读一些关于 Ajax 的指南/教程(实际上有 ton 的教程)。

标签: javascript php jquery json forms


【解决方案1】:

这是可能的。而且很简单。这是一个例子:

HTML:

<script src="https://unpkg.com/jquery"></script>
<form id="myForm" method="post">
  <input type="text" name="first"><br>
  <input type="text" name="last"><br>
  <input type="submit" value="Send">
</form>

<p id="output"></p>

JS:

function parseAnswer (data) {
  var content

  content += 'Name: ' + data.first + '<br>'
  content += 'Surname: ' + data.last

  $('#output').text(Name)
}

$('#myForm').on( "submit", function (evt) {
  var data = $(this).serialize()

  evt.preventDefault()
  $.post('any.php', data, parseAnswer)
})

PHP:

<?php
  header("Content-type: application/json");

  $first = $_POST['first'];
  $last = $_POST['last'];

  $arr = ['first' => $first, 'last' => $last];

  echo json_encode($arr);
?>

【讨论】:

  • 这是我想要的。在我的 PHP 中,我有一个对数据库的查询以插入值,然后我必须从页面传递表单数据和我正在制作的数组。感谢您的发帖和帮助:)
  • 我正在尝试将我的 json 数组添加到数据中以传递所有数据,但由于“data.push”不是函数而出现错误。这是我的代码:
  • $("form").submit(function(event){ $(".toadd").each(function(index){ var array = {} array["id"] = $(this).find("input").val() array["funcion"] = $(this).find(".func input").val() array["tarea"] = $(this).find(".tarea textarea").val() console.log(array) arrayToPass.funciones.push(array) }) var data = $(this).serialize() data.push(arrayToPass); console.log(data); event.preventDefault(); })
  • 没关系,我使用的是序列化,但我必须使用 serializeArray ;)
猜你喜欢
  • 2015-06-14
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 2016-03-21
  • 2014-07-18
相关资源
最近更新 更多