我是一个 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/