因为它们是两个不同的请求,而post不会从初始加载延续到AJAX请求。页面加载之间不会记住任何内容,并且一旦生成页面,服务器上就不会存在任何内容。每次都是一目了然,为什么它会记住post变量呢?
当您请求页面时,WP创建了一个post循环和一个主查询,并调用the_post
建立了现在的职位。这就是它第一次起作用的原因。
但当您提出AJAX请求时,这些都没有,毕竟它怎么知道?每个请求都是孤立的,都有自己的东西。它没有URL来从中提取查询变量并执行查询/模板,事实上,在管理AJAX请求中没有post查询,除非您自己执行查询
因此,AJAX请求需要post ID,但它没有该信息,so send it!
data: {
action: \'getmyfunctionform1\',
post_id: <?php echo get_the_ID();?>
},
你现在可以
$_POST[\'post_id\']
一些进一步的注意事项是安全性这是不安全的:
success: function(response) {
jQuery("#myResultsform1").html(response);
}
特别是如果您没有使用SSL,任何人都可以拦截并将任何内容插入页面。相反,它应该返回数据,而不是HTML,然后使用这些数据在JS中构建HTML。
命名
myfunctionform1
没有告诉我们这到底是怎么回事,也许更好的名字应该是
wccaf_uk_affiliate_link_ajax_handler
?
RESTAPI管理AJAX很旧,当它不工作时会很痛苦,是一个完全没有线索的黑盒子。
为什么不使用更简单的RESTAPI呢?
注册端点,例如。example.com/wp-json/arabtornado/v1/affiliate_link
add_action( \'rest_api_init\', function () {
register_rest_route( \'arabtornado/v1\', \'/affiliate_link/\', array(
\'methods\' => \'GET\',
\'callback\' => \'arabtornado_generate_link\'
) );
} );
注意回调
arabtornado_generate_link
, 这就是做这项工作的功能:
function arabtornado_generate_link( $request ) {
$post_id = $request[\'post_id\'];
// etc.. generate response
$result = "https://example.com/affiliate";
return $result;
}
嘿,普雷斯托:
var url = \'https://example.com/wp-json/arabtornada/v1/affiliate_link?post_id=1\';
jQuery.get( url ).done( function( data ) {
jQuery("#myResultsform1").text( data );
}).fail( function() {
jQuery(\'#myResultsform1\').text("couldn\'t contact server");
});
如果不起作用,它只会告诉您响应中的问题所在,因此请查看浏览器开发工具中的网络面板