我一直在阅读Stack Overflow上的很多问题并实现答案。似乎没有什么工作,艰难。我想允许用户上传文件,并且我设法在没有AJAX的情况下实现它。它只是一个PHP脚本(PHP,Javascript,CSS)。在分离所有内容以清理它的同时,我决定尝试使用AJAX。
这是指向我的javascript文件的链接:AJAX
该文件还包含一个要删除的AJAX请求。但是,我现在不担心它是否有效。
这里是upload.php的链接:upload.php
这个PHP文件不是直接调用的,我把它挂钩到一个动作钩子中,如下所示:
add_action( 'wp_ajax_vibesoft_files_upload', 'vibesoft_files_upload' );
function vibesoft_files_upload() {
include 'upload.php';
}
此代码随后包含在我的活动主题的functions.php中。
编辑2: 找到了可能的线索!好极了!这是来自admin-ajax.php的代码片段:
// Require an action parameter
if ( empty( $_REQUEST['action'] ) )
wp_die( '0', 400 );
由于我在控制台日志中返回了400,我将400更改为666.成功函数已运行,但我的AJAX脚本检查失败:
if ( typeof data == 'object' ) {
console.log( 'data is JSON' );
}
在下一行,有:
console.log( data )
其中打印单个0和admin-ajax在其末尾有一个wp_die(' 0')。
编辑3: 所以,我已经改变了$ .ajax调用:
$( '#user-file' ).change( function( event ) {
var formData = new FormData();
formData.append( "action", "vibesoft_files_upload" );
formData.append( "_wpnonce", vbsoft.nonce_upload );
formData.append( "user-file", $(this)[0].files[0] );
$.ajax({
type: "POST",
url: vbsoft.ajax_url,
data: formData,
contentType: false,
processData: false,
dataType: 'JSON',
当然,这不是完整的功能。我改变的是我如何准备FormData以及发生的新事物是: 如果我删除了dataType:' JSON'从代码中,我得到一个完整的页面作为回应(我不知道哪一个,那里有很多HTML和我得到的东西)。如果我保留数据:' JSON'在那里,我得到一个带有statusText的对象:" parseerror"和responseText:" the_entire_page_here"
第一行,之后
wp_send_json( array( 'error' => 'Test' ) );
为什么我没有收到JSON?
编辑4:
好的,尝试将所有$更改为jQuery - 仍然没有变化。为了调试目的,我稍微修改了我的admin-ajax.php:
// Require an action parameter
if ( empty( $_REQUEST['action'] ) ) {
wp_send_json( array( 'error' => 'no action parameter' ) );
wp_die( '0', 400 );
}
现在,我正在收回JSON。甜!所以,我不知道在我的数据中发送了一个动作参数。我不明白。我在网上看过几个使用formData.append的例子(" action"," action_name_without_wp_ajax");在各个地方。
编辑5:
如果我设置contentType:false,那么我在响应标头中得到了什么,如果我将其设置为contentType:" multipart / form-data",我得到:
答案 0 :(得分:0)
请考虑将所有“$”更改为“jQuery”