使用admin-ajax阻止常规的php表单提交

时间:2013-09-23 作者:biggles

我有一个页面,侧栏中有一个帖子表和一组复选框过滤器。看起来像这样:

www.example.com/toylist

|___________|    |_______________________|
| [ ] Red   |    |  1. Big Red Box       |
| [ ] Blue  |    |  2. Big Blue Box      |
| [ ] Green |    |  3. Big Green Box     |
|           |    |  4. Small Red Box     |
| [ ] Box   |    |  5. Small Blue Box    |
| [ ] Ball  |    |  6. Small Green Box   |
|           |    |  7. Big Red Ball      |
|           |    |  8. Big Blue Ball     |
| [Filter]  |    |  9. Small Green Ball  |
侧栏是一种表单,它将数据发布到同一url,并根据所选选项附加参数。(www.example.com/toylist?color=red&type=ball) 该页面默认设置为显示所有帖子,并读取URL过滤器并返回经过适当过滤的帖子。

仅用PHP就可以成功地实现这一点。然后我添加了ajax以获得更好的用户体验,因此当您单击复选框时,表中会重新填充过滤后的帖子,而不必单击过滤器按钮。

我发现,为了将ajax与wordpress结合使用,应该通过admin ajax进行路由。php使用wp_ajax_ 钩我添加了挂钩,并将表单的提交操作更改为admin ajax。php。现在,当javascript被禁用时,表单显然不再工作。我得到一个404,因为浏览器试图显示admin ajax。php。

有没有一种方法可以使用wordpress ajax钩子让表单在启用和不启用javascript的情况下工作?

Update: 好的,我修复了404错误。表单操作中的我的url不正确。从功能上讲,它现在可以在没有javascript的情况下工作,无论它显示的页面如何,www.example.com/wp-admin/admin-ajax.php?action=my_function&color=red&type=ball 很明显,我没有在我的主题中选择风格。如何将其路由回“www.example”。com/toylist`从我的函数返回数据?

1 个回复
最合适的回答,由SO网友:Dan Ștefancu 整理而成

You can change the form action to admin-ajax.php?action=your_action and this will work, but it\'s not best practice.

The ajax submition should be added via javascript, not by changing the form action (also your js function should prevent the form from submiting normally, returning false - see here an example: http://net.tutsplus.com/tutorials/javascript-ajax/submit-a-form-without-page-refresh-using-jquery/), and php handling of the data (on the page the form action is poing to) should be present as fallback.

结束

相关推荐

Get the_content with ajax

我正在使用WordPress(WP)作为在地图上交付内容的应用程序的后端。几天来,我一直在尝试了解WP中的AJAx,并找到了一个很好的tutorial 我试着跟着。我已经对其进行了改编,以便在主题中使用,但是如何才能“获取”该主题的内容?相关部分:function the_content( $content ) { global $post; if( is_single() && \'post\' == $post->post_type ) { /