我有一个简单的表单,我正在为我的wordpress网站构建,我似乎无法弄清楚我做错了什么。我使用ajax从通用function.php脚本(我称之为wpplugin.php)调用一个单独的PHP脚本来处理我的所有表单数据但我似乎无法弄清楚我的javascript文件或ajax的url是不是触发。
所以我有3个文件,我有/wpplugin.php和/upload.php和/code/upload.js。
要添加js文件,请在wpplugin.php中使用此代码:
add_action( 'wp_enqueue_scripts', 'all_enqueue_scripts' );
function all_enqueue_scripts()
{
wp_enqueue_script( 'uploadjs', plugins_url( '/code/upload.js', __FILE__), array('jquery'), '1.0', true );
}
我的js脚本中的ajax如下:
$("#uploadform").on('submit',(function(e) {
e.preventDefault();
$.ajax({
url: "upload.php",
type: "POST",
data: new FormData(this),
contentType: false,
cache: false,
processData:false,
success: function(data)
{
arr = data;
}
});
}));
我在wpplugin.php中将js脚本包含在n html块中,如下所示:
<script src="code/upload.js">
wordpress的反馈非常有限,我无法判断我的ajax是否未触发或js未被使用。我已经测试了xxamp和通用硬编码html在线网站中的所有代码,它可以工作。
欢迎任何建议。
答案 0 :(得分:1)
脚本加载问题是因为您在plugins_url()
文件中使用functions.php
。
来自plugins_url()
的文档:
检索插件或mu-plugins目录的绝对URL (不带斜杠),或者,当使用$ path参数时,检索该目录下的特定文件。
来源:https://codex.wordpress.org/Function_Reference/plugins_url
假设您的主题目录如下所示:
|- style.css
|- index.php
|- functions.php
|- code
|- upload.js
您要做的是编辑functions.php
文件并替换:
wp_enqueue_script( 'uploadjs', plugins_url( '/code/upload.js', __FILE__), array('jquery'), '1.0', true );
带
wp_enqueue_script( 'uploadjs', get_template_directory() . '/code/upload.js', array('jquery'), '1.0', true );
编辑:关于upload.php
WordPress已经为每个主题和插件提供了一个内置系统,用于单个ajax端点。
端点地址是admin_url( 'admin-ajax.php' )
的返回值,实际上通常为mydomain.com/wp-admin/admin-ajax.php
。
由于每个主题和插件都使用相同的端点,您如何区分您的呼叫?
您发送的特殊财产称为action
。是什么让WordPress知道谁正在点击admin-ajax.php
。
所有信息都在这里:https://codex.wordpress.org/AJAX_in_Plugins
它的样子的快速样本是这样的:
<强> JS 强>
$("#uploadform").on('submit',(function(e) {
e.preventDefault();
$.ajax({
url: "wp-admin/admin-ajax.php?action=akamaozu_do_frontend_upload",
type: "POST",
data: new FormData(this)
});
}));
<强>的functions.php 强>
add_action( 'wp_ajax_akamaozu_do_frontend_upload', 'handle_signed_in_uploads' );
add_action( 'wp_ajax_nopriv_akamaozu_do_frontend_upload', 'handle_signed_out_uploads' );