【发布时间】:2019-04-23 19:23:42
【问题描述】:
我是 WP 界的新手。在阅读了大量帖子后,我仍然无法在 WordPress 上进行简单的 Ajax 文件上传。
我正在尝试存储在数据库中 - 姓名、电子邮件和简历。如果我删除输入文件字段,则名称和电子邮件将正确存储到数据库中。
目前,我的表单是这样的
<form method="post" id="applicantform" enctype="multipart/form-data">
<input type="text" name="name" placeholder="Name" />
<?php wp_nonce_field( 'my_nonce' ); ?>
<input type="email" name="email" placeholder="Email" />
<div class="upload">
<input type="file" id="upload-resume" name="upload-resume" />
</div>
<input type="submit" name="submit_form" id="submit_form" value="Send" />
</form>
js部分是
jQuery(document).ready(function($){
$('#submit_form').click(function(e){
var applyformData = document.getElementById("applicantform");
e.preventDefault();
//ajax call
$.ajax({
type: 'POST',
url: myajax.ajaxurl, // ajax url you assigned!
contentType: false,
cache: false,
processData:false,
dataType: 'json',
data: {
action: 'applyform',
formdata: applyformData,
},
// Displaying succes message
success: function( data ){
},
// Displaying error message
error: function( request ){
console.log(request);
}
});
});
});
这是我function.php中的函数
add_action('wp_enqueue_scripts', 'my_ajax_scripts');
function my_ajax_scripts(){
wp_enqueue_script( 'myscript', get_template_directory_uri().'/assets/js/formSubmit.js', array('jquery'), '1.0', true );
wp_localize_script( 'myscript', 'myajax', array( 'ajaxurl' => admin_url( '/admin-ajax.php' ) ) );
}
function applyform(){
$valid_extensions = array('pdf' , 'doc' , 'ppt'); // valid extensions
$path = wp_basename( $uploads['baseurl'] ); // upload directory
if(!empty($_POST['name']) || !empty($_POST['email']) || $_FILES['upload-resume'])
{
$resume = $_FILES['upload-resume']['name'];
$tmp = $_FILES['upload-resume']['tmp_name'];
$ext = strtolower(pathinfo($resume, PATHINFO_EXTENSION));
$final_resume = rand(1000,1000000).$resume;
if(in_array($ext, $valid_extensions))
{
$path = $path.strtolower($final_resume);
if(move_uploaded_file($tmp,$path))
{
$table = 'UPC_jobs';
$data = array(
'customer_name' => $formdata_array['name'],
'customer_email' => $formdata_array['email'],
'customer_resume' => $path
);
$format = array(
'%s',
'%s',
'%s'
);
$success=$wpdb->insert( $table, $data, $format );
}
}
else {
echo 'invalid';
}
}
}
admin-ajax.php 的当前错误是 Status Code: 400。
谁能帮帮忙
【问题讨论】:
-
(HTTP) 400 Bad Request 响应状态代码表示服务器不能或不会处理请求,因为某些东西被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧,或欺骗性请求路由)。您在控制台中收到任何错误吗?如果是这样,错误是什么?还可以尝试检查您的表单提交是否正常
-
是的,我也读过。这就是我发布问题的原因,因为我看不出有什么问题。控制台中没有错误。此外,正如我所写的,如果我从表单中删除文件输入,并且从 php 部分数据保存在数据库中。所以,它一定是文件字段。
-
尝试 *$('#submit_form').on("click", function(){** 并尝试先使用更简单的函数来检查您的表单提交是否有效。也使确定你使用的是 jQuery。也尝试在这里使用 && *if(!empty($_POST['name']) || !empty($_POST['email']) || $_FILES['upload-resume'] )
-
当我添加
$('#submit_form').on("click", function(){时,我得到了Uncaught ReferenceError: e is not defined。 jQuery 工作正常,毕竟当我删除文件字段时,我可以将姓名和电子邮件存储在数据库中。 -
使用 $('#submit_form').on("click", function(e){