#php #jquery #ajax #codeigniter #file-upload
#php #jquery #ajax #codeigniter #загрузка файла
Вопрос:
Пытаюсь загрузить изображение в каталог /assets / images /, и это работает на localhost, но при отправке на сервер тот же код не работает, и консоль сообщает: Uncaught SyntaxError: неожиданное завершение ввода JSON
Я обновил файл .htaccess, чтобы показать следующее:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index.php|assets|upload|robots.txt|.*.css)
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
но это не помогло
При отправке:
$('#submit').submit(function(e){
var newoi = $( "tr:last" ).data('order_index') 1;
$('input[name="order_index"]').attr('value',newoi);
e.preventDefault();
$.ajax({
url:'<?php echo base_url('billboard/do_upload');?>',
type:"post",
data: new FormData(this),
processData:false,
contentType:false,
cache:false,
async:false,
success: function(data){
alert(data);
console.log(data);
var data = JSON.parse(data);
$('#gallery').append('<tr class="photos" id="' data.id '" data-order_index="' data.order_index '"><td><button class="up"> ^ </button><button class="down"> v </button></td><td><img src="/assets/images/' data.url '"></td><td><button class="delete">delete</button></td></tr>');
bindDeactivate();
},
error: function(jqxhr, status, exception) {
alert('Exception:', exception);
}
});
});
и консоль на localhost выводит:
{"success":true,"id":32,"location_id":"2","url":"eb3bc54c5c8d1261d3ef0cf75a32b17f.png","order_index":"1"}
но на моем сервере он выводит:
Uncaught SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at Object.success (index:155)
at i (jquery-3.2.1.min.js:2)
at Object.fireWith [as resolveWith] (jquery-3.2.1.min.js:2)
at A (jquery-3.2.1.min.js:4)
at XMLHttpRequest.<anonymous> (jquery-3.2.1.min.js:4)
at XMLHttpRequest.send (<anonymous>:1:781)
at Object.send (jquery-3.2.1.min.js:4)
at Function.ajax (jquery-3.2.1.min.js:4)
at HTMLFormElement.<anonymous> (index:144)
php-код, который он попадает:
function do_upload(){
$config['upload_path']="./assets/images";
$config['allowed_types']='gif|jpg|png';
$config['encrypt_name'] = TRUE;
$this->load->library('upload',$config);
if($this->upload->do_upload("file")){
$data = array('upload_data' => $this->upload->data());
$location_id= $this->input->post('location_id');
$url = $data['upload_data']['file_name'];
$order_index = $this->input->post('order_index');
$data = array(
'location_id' => $location_id,
'url' => $url,
'order_index' => $order_index
);
$result['success'] = $this->db->insert('billboard_photos', $data);
$result['id'] = $this->db->insert_id();
$result['location_id'] = $location_id;
$result['url'] = $url;
$result['order_index'] = $order_index;
echo json_encode($result);
}
Я не уверен, что вызывает проблему, но я читал, что это может быть как-то связано с файлом htaccess. Я удалил index.php с URL, но он обслуживается по https: // поэтому я не знаю, является ли это частью проблемы.
Заранее спасибо за помощь!
Комментарии:
1. В целях отладки нажмите ajax URL в браузере, чтобы увидеть результат
2. ничего не появляется, он отправляет на этот URL
3. распечатайте загружаемое изображение на php, возможно, проблема с разрешением файла — if($this-> upload->do_upload(«файл»)) { //код загрузки } else { $error = array(‘error’ => $this-> upload->display_errors()); var_dump ($error); exit; }
4. Опубликуйте полный URL здесь
5. Это защищенная страница, поэтому для доступа к ней вам потребуется войти в систему, поэтому, к сожалению, полный URL-адрес не сильно поможет