不确定为什么wp_ajax不起作用?

时间:2012-01-17 作者:Shoebox

我正在努力掌握在wordpress中使用AJAX的技巧,下面的代码使用wordpress功能快捷码[ajaxf]创建了一个带有输入框的表单。

<?php
add_action( "wp_ajax_ajaxcf", "my_action_callback" );
add_action( "wp_ajax_nopriv_ajaxcf", "my_action_callback" );

function my_action_callback() {
    $whatever = intval( $_POST[\'fname\'] );
    echo $whatever;
    die(); 
}
function ajax_contact_form() {
?>
<script type="text/javascript" >
jQuery(".submit").click(function() {
    jQuery.post(ajaxurl, $(\'#ajaxForms\').serialize(), function(response) {
        alert(\'Got this from the server: \' + response);
    });
}); 
</script>

<form id="ajaxForms">   
    <label for="fname">First Name:</label>
    <input id="fname" name="fname" value="First Name" type="text" />
  </p>

  <p class="submit">
    <input name="action" type="hidden" value="ajaxcf" />
    <input id="submit_button" class="submit" value="Send" type="button" />
  </p>
</form>
<?php
    }
add_shortcode("ajaxcf", "ajax_contact_form");
我只是想用jQuery提醒响应,但它似乎不起作用,我也不知道为什么。

感谢您的帮助。

谢谢

2 个回复
最合适的回答,由SO网友:Milo 整理而成

这只是一个简单的javascript问题。当解析将单击行为附加到表单的javascript时,表单元素还不存在,因为它位于页面的下方,所以不会附加。将javascript移动到表单下方,将其包装在jQuery(document).ready(), 或使用live.

编辑-$(\'#ajaxForms\').serialize(); 应该是jQuery(\'#ajaxForms\').serialize();, 您需要定义ajaxurl 在javascript中:var ajaxurl = "<?php echo admin_url( \'admin-ajax.php\' ); ?>";, 否则,您的代码工作正常,请在此处进行测试。

SO网友:Stephen Harris

question here 可能对你有帮助。

基本上,您需要确保在发布ajax请求时指定“操作”。在代码中,操作是“ajaxcf”。

在插件/主题的函数中。然后需要钩住的php文件init 一个函数,用于检查操作,必要时检查任何nonce,然后调用以下函数:;

 do_action( "wp_ajax_ajaxcf" );
 do_action( "wp_ajax_nopriv_ajaxcf" );
<小时>EDIT 我还没有检查JavaScript方面的内容,请参见Milo的回答。但是wp_ajax_ajaxcf 不是默认操作,因此您必须“执行”。

结束

相关推荐

Ajax and autocomplete

我在自定义的帖子类型上有一组元框。其中两个是简单的输入/文本类型字段,应具有自动完成的输入:A)另一个自定义帖子类型B)用户现在我有一个问题,我需要以某种方式触发自动完成事件。到目前为止,我有一个非常简单的定义:jQuery( document ).ready( function ($) { $( \'#some_id\' ).autocomplete( { minLength