Fine-uploader не может прочитать ответ iframe с IE7

Я использую jquery.fineuploader-3.7.0 и структуру Code igniter для серверной части.

Мой JS-код:

$('#manual-fine-uploader').fineUploader({
request                 : { endpoint: 'declaration/uploadfile'},
autoUpload              : false,
template                : '<div class="qq-uploader span12">' +
                          '  <pre class="qq-upload-drop-area span12"><span>{dragZoneText}</span></pre>' +
                          '  <div class="qq-upload-button " style="width: auto;">{uploadButtonText}</div>' +
                          '  <span class="qq-drop-processing"><span>{dropProcessingText}</span><span class="qq-drop-processing-spinner"></span></span>' +
                          '  <ul id="qq-upload-list" class="qq-upload-list" style="margin-top:10px; text-align:center;"><li></li></ul>' +
                          '  <ul class="qq-upload-list" style="margin-top: 10px; text-align: center;"></ul>' +
                          '</div>',
fileTemplate            : '<li>' +
                          '  <div class="qq-progress-bar"></div>' +
                          '  <span class="qq-upload-spinner"></span>' +
                          '  <span class="qq-upload-finished"></span>' +
                          '  <span class="qq-upload-file"></span>' +
                          '  <span class="qq-upload-size"></span>' +
                          '  <a class="qq-upload-cancel" href="#">{cancelButtonText}</a>' +
                          '  <a class="qq-upload-retry" href="#">{retryButtonText}</a>' +
                          '  <a class="qq-upload-delete" href="#">{deleteButtonText}</a>' +
                          '  <span class="qq-upload-status-text">{statusText}</span>' +
                          '</li>',
failedUploadTextDisplay : {
                            mode             : 'custom',
                            maxChars         : 1500,
                            responseProperty : 'error',
                            enableTooltip    : true
                          },
text                    : {
                            uploadButton : '<color=#2E6E9E><b>Selectionnez le fichier à déposer</b></color>',
                            failUpload   : 'Le chargement a échoué'
                          }  });
 $('#triggerUpload').click(function() {
$('#manual-fine-uploader').fineUploader('setParams', {'id_fait':$('#id_fait').attr('value') });
$('#manual-fine-uploader').fineUploader('uploadStoredFiles'); });

Мой ответ на стороне сервера:

>HTTP/1.0 200 OK
>Date: Fri, 26 Jul 2013 08:12:09 GMT
>Server: Apache/2.2.15 (CentOS)
>X-Powered-By: PHP/5.3.3
>Expires: Thu, 19 Nov 1981 08:52:00 GMT
>Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
>Pragma: no-cache
>Connection: close
>Content-Type: text/html; charset=UTF-8

содержание :

{"success":true,"file_inner":"<a href='pj\/'116810_116810_cimpa_insertion.xls'  target='_blank'>116810_cimpa_insertion.xls<\/a>"}

В FF, Chrome у меня есть сообщение об успехе на моей веб-странице (зеленое), но в IE7 или IE8 у меня есть сообщение, которое сказало в моей консоли панели отладки:

[FineUploader 3.7.0] Ошибка при попытке проанализировать ответ на загрузку iframe ([object Error]) [FineUploader 3.7.0] «ошибка» не является допустимым свойством в ответе сервера.

и сообщение об ошибке веб-страницы (красный). Но загрузка в порядке (файл правильно на моем сервере)

Я новичок в Fine-uploader, не могли бы вы помочь мне найти, где я сделал ошибку, пожалуйста?

код серверной части:

/**
* uploadfile
* @access public
* @return string
*/
  public function uploadfile() {
    $post['id_fait'] = $this->input->post('id_fait');
    if ( empty($post['id_fait']) ) {
      $return['error'] = 'ID_FAIT manquant';
      return true;
    }
    else {
      $_FILES['qqfile']['name'] = $post['id_fait']."_".$_FILES['qqfile']['name'];
      $config['upload_path']   = DOCUMENT_PATH;
      $config['max_size']      = UPLOAD_MAX_SIZE;
      $config['overwrite']     = FALSE;
      $config['allowed_types'] = ALLOWED_EXT;
      $config['remove_spaces'] = FALSE;
      $this->load->library('upload', $config);

      if ( !$this->upload->do_upload('qqfile')) { $return['error'] = $this->upload->error_msg[0]; }
      else {
        $data = $this->upload->data();
        $post['fichier'] = $data['file_name'];
        $insert = $this->db->insert('senla_faits_piece_jointe',$post);
        $return['success'] = $insert;
        $return['file_inner'] = "<a href='pj/'".$post['id_fait']."_".$data['file_name']."'  target='_blank'>".$data['file_name']."</a>";
      }
    }
    echo json_encode( $return, JSON_FORCE_OBJECT );
  }

ОБНОВЛЕНИЕ: после внесения изменений ответ моего сервера:

HTTP/1.0 200 OK
Date: Fri, 26 Jul 2013 20:21:01 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 124
Connection: close
Content-Type: text/html; charset=UTF-8

и содержание:

{"success":true,"file_inner":"<a href=\"pj\/116842_116842_brochure 12.pdf\"  target=\"_blank\">116842_brochure 12.pdf<\/a>"}

У меня всегда есть красное веб-сообщение, в котором говорится: ошибка загрузки (на французском языке) и это сообщение в моей консоли панели отладки:

[FineUploader 3.7.0] Error when attempting to parse iframe upload response ([object Error])

 [FineUploader 3.7.0] 'error' is not a valid property on the server response.

Большое спасибо за вашу помощь

Стефан

Обновление 2 после изменения типа контента, всегда одна и та же проблема: ответ сервера:

HTTP/1.0 200 OK
Date: Sat, 27 Jul 2013 20:14:38 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=7riosh2q9edldanjp9vtg4ili3; path=/
Set-Cookie: PHPSESSID=7riosh2q9edldanjp9vtg4ili3; path=/
Connection: close
Content-Type: text/plain; charset=UTF-8

Содержимое :

{"success":true,"file_inner":"<a href=\"pj\/116841_116841_capture_portail_sonacotra.doc\"  target=\"_blank\">116841_capture_portail_sonacotra.doc<\/a>"}

Я думаю, что это не проблема контента, возможно, это проблема IE, который не может прочитать ответ, отправленный сервером через iframe, но я недостаточно знаю javascript, чтобы найти решение

ОБНОВЛЕНИЕ 29/07/2013: Я сделал тест: если я удалю свой $return['file_inner'] и оставлю только сообщение об успехе или ошибке, тогда все в порядке

Мой $return['file_inner'] находится здесь, потому что пользователь может проверить загрузку документа, нажав на ссылку. Но это не очень важная функция, я мог бы удалить ее. Возможно, я что-то забыл, когда они являются несколькими атрибутами в моем объекте «ответ». или, возможно, прекрасный код загрузки ждет только один атрибут.


person user2621873    schedule 26.07.2013    source источник
comment
Отличный вопрос. Спасибо, что нашли время, чтобы предоставить всю эту информацию и так ясно объяснить вашу проблему. Приятно видеть правильно сформулированный вопрос, и я бы хотел, чтобы больше людей в Stackoverflow публиковали вопросы, такие же подробные и полные, как ваш.   -  person Ray Nicholus    schedule 26.07.2013
comment
Убедитесь, что вы используете UTF-8 как на клиенте, так и на сервере.   -  person Mark Feltner    schedule 28.07.2013
comment
Я обновил свой ответ, пожалуйста, посмотрите.   -  person Ray Nicholus    schedule 29.07.2013


Ответы (2)


При ближайшем рассмотрении в вашем ответе JSON есть несколько странных свойств.

У меня очень мало профессионального опыта работы с PHP, но я могу сказать, что содержание вашего ответа неверно. Вероятно, вам следует использовать json_encode для форматирования содержимого ответа. В Fine Uploader есть пример сценария PHP, который уже Является ли это. Возможно, вам стоит взглянуть.

В любом случае содержание вашего ответа должно выглядеть следующим образом:

{"success":"true","file_inner":"<a href=\"pj/116841_116841_capture_portail_sonacotra.doc\"  target=\"_blank\">116841_capture_portail_sonacotra.doc</a>"}
person Ray Nicholus    schedule 26.07.2013
comment
Я сделал это изменение, но они та же проблема. - person user2621873; 27.07.2013
comment
Скопируйте точное содержание ответа после внесения этого изменения. - person Ray Nicholus; 27.07.2013
comment
Content-Type вашего ответа, вероятно, должен быть text/plain, а НЕ text/html. Пожалуйста, попробуйте это. - person Ray Nicholus; 27.07.2013

Решение от OP.

Решение находится в примере php-скрипта, моя ошибка заключается в том, чтобы сделать URL-адрес в моем объекте без преобразования htmlspecialchars. С этим php-кодом на стороне сервера все в порядке

/**
* uploadfile
* @access public
* @return string
*/
  public function uploadfile() {
    $post['id_fait'] = $this->input->post('id_fait');
    if ( empty($post['id_fait']) ) {
      $return['error'] = 'ID_FAIT manquant';
      return true;
    }
    else {
      $_FILES['qqfile']['name'] = $post['id_fait']."_".$_FILES['qqfile']['name'];
      $config['upload_path']   = DOCUMENT_PATH;
      $config['max_size']      = UPLOAD_MAX_SIZE;
      $config['overwrite']     = FALSE;
      $config['allowed_types'] = ALLOWED_EXT;
      $config['remove_spaces'] = FALSE;
      $this->load->library('upload', $config);

      if ( !$this->upload->do_upload('qqfile')) { $return['error'] = $this->upload->error_msg[0]; }
      else {
        $data = $this->upload->data();
        $post['fichier'] = $data['file_name'];
        $insert = $this->db->insert('senla_faits_piece_jointe',$post);
        $return['success'] = $insert;
        $return['file_inner'] = "<a href=\"pj/".$post['id_fait']."_".$data['file_name']."\"  target=\"_blank\">".$data['file_name']."</a>";

     }
    }
// log_askel($this->upload);
    header('Content-type: text/plain');
    echo htmlspecialchars(json_encode($return), ENT_NOQUOTES);
  }
person Community    schedule 30.04.2018