我正在尝试使用ajax将文件(输入类型文件)发送到php服务器。 该文件被发送到codeigniter中的控制器,但我得到400响应(错误的请求)。我该如何解决这个问题?
代码如下:
<form id="load_file" enctype="multipart/form-data">
<fieldset class="content-group">
<div class="form-group">
<label class="control-label col-lg-2">Default file input</label>
<input id="sortpicture" type="file" name="sortpic" />
<button id="upload">Upload</button>
</div>
</fieldset>
</form>
<script>
$('#upload').on('click', function(e) {
var base = '<?php echo base_url();?>';
e.preventDefault();
var file_data = $('#sortpicture').prop('files')[0];
var form_data = new FormData();
form_data.append('file', file_data);
//alert(form_data);
$.ajax({
url: 'importa/process', // point to server-side PHP script
dataType: 'text', // what to expect back from the PHP script, if anything
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
success: function(php_script_response){
alert(php_script_response); // display response from the PHP script, if any
}
});
});
</script>
这不是路径问题,因为当我删除类型时:'post'它正在工作,但是在控制器中当我尝试显示文件名时出现错误消息未定义索引文件
答案 0 :(得分:0)
请使用基本网址site_url()
var site_url = '<?php echo site_url('process/index');?>';
现在
$.ajax({
url: site_url,
....
假设您已在url
中启用了config.php
帮助程序,并且您具有使用Process
方法的控制器index
答案 1 :(得分:0)
我通常在ajax调用中使用相对路径:
url: '/controller/function'
答案 2 :(得分:0)
尝试添加这样的文件
您可以将整个表格交给FormData()
进行处理
var form = $('form')[0]; // You need to use standard javascript object here
var formData = new FormData(form);
然后在控制器中用$_FILES
而不是$_GET
或$_POST
来检查文件输入
print_r($_FILES['sortpic']);
答案 3 :(得分:0)
定义这样的AJAX
<script>
$('#upload').on('click', function(e) {
e.preventDefault();
var base = '<?php echo base_url();?>';
$.ajax({
url: base + 'process',
data: new FormData(this),
contentType: false,
cache: false,
processData:false,
type: 'post',
success: function(response){
alert(response);
}
});
});
</script>
您的URL上显示base + 'process'
,这表示您process
控制器的调用索引函数。并且确保config.php
中的基本URL以正斜杠(/
)(https://stackoverflow.com/
)结尾。因此网址应如下所示
https://stackoverflow.com/process
<-在这里您未指定函数名称。因此请确保在您的控制器index()
中添加了功能。
答案 4 :(得分:0)
这是一个安全问题(Codeigniter中的CSRF保护)。 我们应该在发送数据之前将csrf_token添加到数据中:
form_data.append('csrf_token_name', 'token');
或从配置文件中禁用CSRF保护。