【问题标题】:File path for AJAX script (in Wordpress)AJAX 脚本的文件路径(在 Wordpress 中)
【发布时间】:2013-04-29 08:20:02
【问题描述】:

我使用这个 jquery-ajax 脚本来发送电子邮件:

    $.ajax({
        url: process.php,    
        type: "POST",
        data: data,        
        cache: false,
    ...

url我调用了发送邮件的php文件,但是ajax只有在我指定完整路径的情况下才能得到:

url: "http://www.domain.com/wp-content/themes/site_theme/templates/process.php",

但我必须使用这样的语法:

url: "../../templates/process.php",

或者使用变量在html页眉/页脚中声明

HTML

<script type="text/javascript">
  var urlMail = '<?php bloginfo('template_url'); ?>/templates/process.php';
</script>

脚本

url: "../../templates/process.php",

但是对于上述两种情况,浏览器控制台都会检索到这个错误:

POST http://www.domain.com/templates/process.php 404 Not Found 1.56s

我哪里错了?

【问题讨论】:

  • 你试过了吗:url: "templates/process.php",
  • 指定完整路径有什么问题?
  • @jtheman:使用您的解决方案,它会检索到此错误POST http://www.domain.com/contact-page/templates/form-contatti-mail.php 404 Not Found 1.34s
  • @Musa:因为我会在其他项目中使用这个脚本,不想每次都更新路径。
  • &lt;?php bloginfo('template_url'); ?&gt; 实际回显了什么???如果这是您的错误,则看起来是空的:POST http://www.domain.com/templates/process.php 404 Not Found 1.56s

标签: php ajax wordpress variables filepath


【解决方案1】:

这不是在 wordpress 中实现 ajax 的方式。所有 ajax 请求都应发送至admin-ajax.php

在您的模板文件中:

<script type="text/javascript">
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
</script>

在你的 js 中:

$.ajax({
        url: ajaxurl,    
        type: "POST",
        cache: false,
        data: data + '&action=sendmail' //action defines which function to use in add_action
});

在你的functions.php中:

function send_my_mail(){
#do your stuff
}

add_action('wp_ajax_sendmail', 'send_my_mail');
add_action('wp_ajax_nopriv_sendmail', 'send_my_mail');

了解Ajax in Plugins

【讨论】:

  • 我不知道。我会读,但我不是在开发插件!这是一个简单的联系表格。或者我每次使用 ajax 时都必须使用这种方式?
  • 试过你的代码,我得到错误:ReferenceError: sendmail is not defined - action:sendmail, 并重新加载页面
  • 我忘了在它周围加上引号。更新我的答案!
  • 解决方案:将data: data替换为data: data + '&amp;action=sendmail'
  • 而不是将js写在模板文件中,例如; &lt;script type="text/javascript"&gt; var ajaxurl = '&lt;?php echo admin_url('admin-ajax.php'); ?&gt;'; &lt;/script&gt; 我们可以使用wp_localize_script()
【解决方案2】:

我建议您使用注册表之类的系统将所有“全局”值保存在一个地方。

Registry design pattern

如果您对此感兴趣,可以使用我的小型 jQuery 插件。 GitHub rep

<script type="text/javascript">
    $.Registry.set('urlMail', '<?php get_bloginfo('template_url'); ?>/templates/process.php';
</script>

要从注册表中获取价值,您必须使用 $.Registry.get('urlMail');

【讨论】:

  • 谢谢,但我不想只为此使用插件。除此之外,我已经在另一个脚本中使用了那个“变量方法”并且它可以工作。我不明白为什么它不适合这个!
【解决方案3】:

我已经使用RRikesh提供的代码解决了,但是替换了

data: data 

data: data + '&action=sendmail'

【讨论】:

  • 你真的应该让@RRikesh 的答案成为正确答案,因为这个答案涉及对你的 ajax 调用的额外更正,而不是与文件路径相关的原始问题,他在上面回答了.我知道这听起来很挑剔,但绿色勾号是人们寻找问题答案的地方。
  • 我编辑了 RRikesh 的答案以使其正确,因为它的评价最高。我认为这应该是一开始的课程,因为它是正确的答案,只需要一个小的编辑。
猜你喜欢
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
相关资源
最近更新 更多