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

时间:2016-01-02 21:12:42

标签: javascript php jquery ajax parsing

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

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

我不确定是否需要添加

###Piece of code to find the palindrome####
def palindrome():
    Palindromee = input("Enter the palindrome \t:")
    index = 0
    length = len(Palindromee)
    while index < length:
         if Palindromee[0] == Palindromee[-1] :
               index +=1
    print ("Palindrome worked as expected")       

palindrome()

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

或类似于我的表格....但不管怎样,它都会通过这个AJAX文件...

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

正在进入我的解析器文件,看起来像这样......

<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>

SO。我的主要问题是如何将camp_id和team_id放入解析器文件中,以便我可以使用它们来更新我的数据库?

第二个问题是......这个形式是由foreach循环生成的,这使得ajax难以知道要更新哪个字段?

那么,我怎么能把camp_id带到

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);
}

和team_id到

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

我试图将其分解为最简单的形式,但仍然没有进入该功能。这段代码......

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

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

1 个答案:

答案 0 :(得分:0)

jQuery .serialize()方法使用元素的name属性来指定变量名称。它会忽略元素的id,任何class es和任何其他属性。因此,如果使用.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

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