我有一个带有选择框的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 );
},
} );