我是php的新手,正在尝试更新php函数中的隐藏字段值,但找不到有效的解决方案。
在template.php中,我有:
<input type="hidden" id="variable_ID" name="variable_name" value="variable_value">
这很好用。
然而,我需要将变量的值更新为functions.php中函数中插入记录的记录ID,例如
function myFunction() {
$insert_record = $mydb->query("INSERT INTO `Table`(`Name`) VALUES ('John')");
$get_record_id = $mydb->insert_id;
// *** Set Hidden field value to $get_record_id here ***
}
我尝试了无数种方法,但似乎都找不到解决办法。关于如何解决这个问题有什么建议吗?
这是我使用的解决方案,感谢@Steven和@El_Vanja的指导。
(我现在可能需要更改问题标题,因为我实际需要做的是使用Ajax从PHP向javascript返回一个变量。我不需要使用隐藏字段(。
PHP
function myFunction() {
$insert_record = $mydb->query("INSERT INTO `Table`(`Name`) VALUES ('John')");
$get_record_id = $mydb->insert_id;
echo json_encode($get_record_id);
exit;
}
JS
jQuery.ajax({
url: ajax_url,
type:'POST',
data: {
action: "myFunction",
anydata:"to be posted"},
success: process_record_ID
});
function process_record_ID(data_returned_from_myFunction){
recordID = data_returned_from_myFunction;
}
希望这能帮助其他人!
票据
- 我认为我们必须将"process_record_ID"声明为AJAX之外的一个单独函数,因为AJAX是异步的。如果我们在成功处理程序中定义函数,那么在从PHP实际返回值之前,该函数将在AJAX中运行
- 在AJAX成功处理程序中,我们不需要在对process_record_ID函数的调用中显式列出"data_returned_from_myFunction"变量。当数据从PHP返回到AJAX成功处理程序时,它仍然会被发送到函数
附加答案
你说得对AJAX是一个异步构造,这意味着某些任务可以在之前执行(从同步的角度来看(。
例如,我们可以(根据原始答案中的代码(使用jQuery直接在成功处理程序中更新字段的值。
我们不能直接更新JS变量,例如:
some_variable = response.value;
如果您尝试,则变量some_variable
可能是undefined
。
差异归结为callbacks
:
回调允许异步函数在完成后调用函数。当设置变量时,会发生在现场。
有两种简单的方法来解决这个问题:
在AJAX请求之外创建一个函数,并允许它在AJAX要求完成后回调该函数——正如您已经发现的那样。
在AJAX请求中使用
complete
选项。
使用回拨
首先,我们需要定义要更新的变量以及我们将用来更新它的函数:
var inserted_id = "";
function update_id(data){
inserted_id = data.record_id;
}
然后我们可以进行AJAX调用:
$.ajax({
type : "POST",
url : "/url/to/functions.php",
data : {data:"to be posted"},
dataType: 'json',
success : update_id
});
不适用。以这种方式调用update_id
意味着我们传递整个返回的JSON对象;而不仅仅是返回的数字。
或者。。。
var inserted_id = "";
function update_id(data){
inserted_id = data;
}
$.ajax({
type : "POST",
url : "/url/to/functions.php",
data : {data:"to be posted"},
dataType: 'json',
success : function(response){
update_id(response.record_id);
}
});
这个方法实际上是相同的,但我们只将返回的数字传递给update_id
函数。
使用完整
complete
的工作方式与success
相同,但一旦AJAX请求…完成…就会激活。。。
var inserted_id = "";
$.ajax({
type : "POST",
url : "/url/to/functions.php",
data : {data:"to be posted"},
dataType: 'json',
complete: function(data) {
inserted_id = data.responseJSON.record_id;
}
});
原始答案
没有看到代码的其余部分给出完整的答案是很棘手的。然而,这应该会让你走上正轨:
PHP
首先,在PHP
中,您需要确保并输出您想要返回到网页的数据。在这种情况下,我们想要返回新创建的记录的insert id
;为此,我们将输出一个JSON
对象,以便AJAX
调用可以解释该值并更新页面:
function myFunction() {
$mydb->query("INSERT INTO `Table`(`Name`) VALUES ('John')");
echo json_encode(["record_id" => $mydb->insert_id]);
exit;
}
N.B.
- 除了
JSON
字符串之外,我们不想要任何输出。因此,在回波之后使用了CCD_ 14。您可能希望/需要调整echo
和exit
以适应代码的其余部分等
JS
现在我们的PHP
将可用数据返回到我们的ajax调用(看起来应该与下面类似(,我们可以获取返回的数据,也就是response
,并相应地更新隐藏字段的值。
$.ajax({
type : "POST",
url : "/url/to/functions.php",
data : {data:"to be posted"},
dataType: 'json',
success : function(response) {
$("#id_of_hidden_field").val(response.record_id);
}
});