更新PHP函数内部的隐藏字段值



我是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;
}

希望这能帮助其他人!

票据

  1. 我认为我们必须将"process_record_ID"声明为AJAX之外的一个单独函数,因为AJAX是异步的。如果我们在成功处理程序中定义函数,那么在从PHP实际返回值之前,该函数将在AJAX中运行
  2. 在AJAX成功处理程序中,我们不需要在对process_record_ID函数的调用中显式列出"data_returned_from_myFunction"变量。当数据从PHP返回到AJAX成功处理程序时,它仍然会被发送到函数

附加答案

你说得对AJAX是一个异步构造,这意味着某些任务可以在之前执行(从同步的角度来看(。

例如,我们可以(根据原始答案中的代码(使用jQuery直接在成功处理程序中更新字段的值。

我们不能直接更新JS变量,例如:

some_variable = response.value;

如果您尝试,则变量some_variable可能是undefined

差异归结为callbacks:

回调允许异步函数在完成后调用函数。当设置变量时,会发生在现场

有两种简单的方法来解决这个问题:

  1. 在AJAX请求之外创建一个函数,并允许它在AJAX要求完成后回调该函数——正如您已经发现的那样。

  2. 在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。您可能希望/需要调整echoexit以适应代码的其余部分等

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

最新更新