Codeigniter: загрузка файла работает на localhost, но не на сервере (неожиданный конец ввода JSON)

#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-адрес не сильно поможет