Wordpress ajax和额外的PHP脚本

时间:2016-11-08 08:28:27

标签: javascript php jquery ajax wordpress

我有一个简单的表单,我正在为我的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在线网站中的所有代码,它可以工作。

欢迎任何建议。

1 个答案:

答案 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' );