我有一个带有选择框的html表单,我想根据用户的选择显示不同的数据。
我真正需要做的就是根据选择在php中更改1个变量。
我进行了一个外部API调用,返回数据并将其显示在html表中。我想根据用户的选择更改api调用的一小部分(get uri中的id)。
有没有简单的方法可以做到这一点?
我已经完成了jquery并使用wordpress将其排队,当更改select box值时,我得到了200个响应。但我似乎无法更改PHP。
为了避免代码轰炸,我修改了回调函数,以给出一个我希望发生的示例。非常感谢您的反馈。谢谢
HTML
<form class="choose-site" action="" method="post">
<select id="choose-site" name="site-choice">
<option value="site1"><?php echo $primary_site ?></option>
<option value="site2"><?php echo $site_2 ?></option>
</select>
</form>
<div id="test123">
<p><?php echo $msg; ?></p>
</div>
JQUERY
(function($) {
$(document).ready(function() {
$("#choose-site").on("change",function() {
const val = this.value;
if (val) {
$.ajax({
type : "post",
dataType : "JSON",
url: my_ajax_object.ajax_url,
data : {
action: "my_ajax_action"
},
success: function(data) {
$("#test123").html(data);
}
});
}});
});
})(jQuery);
函数中的PHP。php
<?php
add_action( \'wp_ajax_my_ajax_action\', \'users_details_callback\' );
add_action( \'wp_ajax_nopriv_my_ajax_action\', \'users_details_callback\' );
function users_details_callback() {
if (isset($_POST[\'site-choice\']) && $_POST[\'site-choice\'] == \'site1\') {
$msg = "hi";
}
if (isset($_POST[\'site-choice\']) && $_POST[\'site-choice\'] == \'site2\') {
$msg = "bye";
}
wp_die();
return $msg;
}
?>
有没有办法更改$msg的值并将其发送回HTML?
最合适的回答,由SO网友:Sally CJ 整理而成
是否有方法更改$msg 并将其发送回HTML?
您的代码基本上已经在这样做了,但存在一些问题:
您的AJAX JS(jQuery.ajax()) 未发送名为的帖子数据site-choice 到AJAX PHP回调(users_details_callback()) 通过以下方式读取数据$_POST[\'site-choice\'].
您的AJAX PHP回调将导致WordPress回显零(0) 因为你在打电话wp_die() 在返回任何输出之前wp_die() 你应该echo 输出与否return 它
您的AJAX JS需要从服务器返回JSON数据(因为您设置了dataType 到JSON — dataType : "JSON"), 因此,AJAX PHP回调应该返回有效的JSON响应。
因此,要解决这些问题:
在PHP函数中(users_details_callback()), 您可以使用wp_send_json_success() 发送JSON响应而无需调用wp_die(): (注意,我还优化了if 条件)
function users_details_callback() {
if ( isset( $_POST[\'site-choice\'] ) ) {
$msg = \'\';
if ( $_POST[\'site-choice\'] == \'site1\' ) {
$msg = \'hi\';
} elseif ( $_POST[\'site-choice\'] == \'site2\' ) {
$msg = \'bye\';
}
wp_send_json_success( $msg );
}
// Send an error if we receive an invalid data.
wp_send_json_error( \'your error\' );
}
在您的
jQuery.ajax() (或
$.ajax()) 电话:
$.ajax( {
...
data: {
action: \'my_ajax_action\',
// Send the site-choice data.
\'site-choice\': $( \'#choose-site\' ).val(),
},
success: function( data ) {
// \'data\' is now an object and the $msg value from the server is put in
// data.data, so use that instead of just \'data\'.
$( \'#test123\' ).html( data.data );
},
} );