javascript - 通过 ajax 将变量从我的表单获取到我的解析器文件

标签 javascript php jquery ajax parsing

我是一个 AJAX 菜鸟,所以请原谅我,但这就是我想做的...... 我有一个 php 表单,它通过 ajax 将信息提交到解析器文件。我需要从该表单获取一些 id 到解析器文件,以便我可以在 sql 更新中使用它们。我会尽量保持代码简单,但提供足够的信息,以便有人可以回答。

我的表单是通过 foreach 循环生成的,该循环遍历团队列表并获取他们的各种特征。为简单起见,假设我需要访问解析器文件的主要内容是 team_id。

我不确定是否需要添加

<input type="hidden" name="team_id" value="<?=$team->id ?>">

<tr data-teamid="<?=$team->id; ?>">

或者类似的东西到我的表单中......但无论哪种方式,它都会通过这个AJAX文件传递......

<script type="text/javascript">
     function updateNames() {
       jQuery('#form-message, #form-errors').html("");
       var post_data = jQuery('form[name="update_names"]').serialize();
       $.ajax({
         url: 'parsers/update_names.php',
         method: 'POST',
         data : post_data,
         success: function(resp) {
          if(resp == 'success'){
            jQuery('#form-message').html("Names and Scores have been Updated!");
           }else{
             jQuery('#form-errors').html(resp);
           }
         }
       });
       return false; // <--- important, prevents the link's href (hash in this example) from executing.
     }
     jQuery(document).ready(function() {
       $(".linkToClick").click(updateNames);
     });
   </script>

并将其添加到我的解析器文件中,如下所示...

require_once '../core/init.php';
 $db = DB::getInstance();
 $errors = [];

 // $camp_id = Input::get('camp_id');
 $camp_id = 18;
 //Find the Teams that Belong to the Camp
 $sql = "SELECT * FROM teams WHERE camp_id = $camp_id";
 $teamsQ = $db->query($sql);
 $all_teams = $teamsQ->results();

//validation and sanitization removed for simplicity.

if(empty($errors)){
  $fields = [];
  foreach($_POST as $k => $v){
    if($k != 'camp_id'){
      $fields[$k] = Input::get($k);
    }
  }

   $db->update('teams',$all_teams->id,$fields);
   echo 'success';
}else{
  echo display_errors($errors);
}
所以。我的主要问题是如何将camp_id和team_id放入解析器文件中,以便我可以使用它们来更新我的数据库?

第二个问题是...表单是由 foreach 循环生成的,这会让 ajax 很难知道要更新哪个字段吗?

那么,我如何获得该camp_id

 $sql = "SELECT * FROM teams WHERE camp_id = $camp_id";

和 team_id

   $db->update('teams',$all_teams->id,$fields);

我尝试将其分解为最简单的形式,但仍然无法实现该功能。这段代码...

<form name="update_names" method="post">
<input type="hidden" name="team_id" value="<?=$teams->id ?>">
<button onclick="updateNames();return false;" class="btn btn-large btn-primary pull-right">test</button>

<script type="text/javascript">
     function updateNames() {
  alert('test');
     }
</script>

给我...未捕获的ReferenceError:updateNames未定义

最佳答案

jQuery .serialize() 方法使用元素的 name 属性来分配变量名称。它忽略元素的id、任何class以及任何其他属性。因此,如果使用 .serialize(),这是正确的格式:

<input type="hidden" name="team_id" value="<?=$team->id ?>">

查看您的 ajax 代码,您的解析器文件将被称为 parsers/update_names.php

要验证所需的字段是否已进入解析器文件,请将其添加到顶部进行临时测试:

<?php
  $tid = $_POST['team_id'];
  echo 'Returning: ' .$tid;
  die();

并临时修改ajax代码块为:

$.ajax({
    url: 'parsers/update_names.php',
    method: 'POST',
    data : post_data,
    success: function(resp) {
        alert(resp);
    {
});
return false;

如果 ajax 处理器文件(您的“解析器”)收到 team_id 数据,那么您将在警报框中收到返回给您的数据。

因此,您现在可以确定:

1. That you are receiving the team_id information;
2. That the ajax back-and-forth communications are working

请注意,您还可以install FirePHP并将文本从 php 处理器文件回显到浏览器的控制台。

关于javascript - 通过 ajax 将变量从我的表单获取到我的解析器文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34570793/

相关文章:

javascript - 如何将选择选项传递给弹出对话框-php codeigniter?

PHP文件名编码转换问题

phpexplode从url中获取最后一个整数

php - 仅缓存来​​自 FuelPHP ORM 结果的关系数据

Javascript 触摸事件故障

javascript - 只有在第一个功能完全完成后才运行第二个功能

javascript - jQuery 自动完成与多个输入上的 getJSON 搜索

javascript - 使用 html 按钮调用加载特定图像的 Javascript 函数

javascript - jQuery UI 工具提示在鼠标移开时不会关闭 div

javascript - 如何使 React 组件更可重用?