2016-09-19 5 views
0

У меня есть код PHP для загрузки файлов, который отлично работает, и в качестве окончательного результата я отправил ответ JSON с статусом загрузки, который я не могу получить.Отправка данных состояния через ответ JSON на POST - анализ через JavaScript

После загрузки файла (POST) мой ответ выглядит следующим образом:

{"html_content":"<p>File was uploaded<\/p>"} 

PHP загрузчик код выглядит следующим образом:

if (!is_file($targetFile)) { 
    move_uploaded_file($tempFile,$targetFile); 
    $html_content="<p>File was uploaded</p>"; 
} 
else { 
    $html_content="<p>You have uploaded duplicate.</p>"; 
    move_uploaded_file($tempFile,$targetFile); 
} 

$json_array=array('html_content'=>$html_content); 

header('Content-type: text/json'); 
header('Content-type: application/json'); 
echo json_encode($json_array); 

и JavaScript основного кода, чтобы на дисплее появляется сообщение:

this.on("success", function(file,responseText) { 
    $.ajax({ 
     dataType: 'json', 
     success: function (response) { 

      var htmlElement = document.createElement("div"); 
      htmlElement.setAttribute("class","success-message"); 
      var responseText = response.html_content; 
      var messageText = document.createTextNode(responseText); 
      htmlElement.appendChild(messageText); 
      file.previewTemplate.appendChild(htmlElement); 

      console.log(response.html_content); 
     } 
    }); 
}); 

Когда я развожу выше JS из части AJAX и задаю переменную responseText как stat ic все работает нормально.

Кроме того, когда я не буду использовать AJAX и только выход console.log(responseText); я получаю это в консоли:

Object {html_content: "<p>File was uploaded</p>"}

Любой ключ, что я пропустил в моем случае?

+0

Интересно, если определение заголовка Content-type дважды в php приводит к тому, что браузер не выполняет синтаксический анализ данных. –

ответ

0

ОК, получил его решить. Код JavaScript выглядит как

 this.on("success", function(file,responseText) { 

      str = JSON.stringify(responseText); 
      responseMessage = $.parseJSON(str); 

      var htmlElement = document.createElement("div"); 
      htmlElement.setAttribute("class","success-message"); 
      htmlElement.innerHTML = responseMessage.html_content; 
      file.previewTemplate.appendChild(htmlElement); 
     }); 
0

Вы не отправляете запрос на ваш PHP-сервер. Укажите URL-адрес.

$.ajax({url: "your_php_file", 
     dataType: 'json', 
     success: function (response) { 
        ... 
       } 
      }); 

Или еще лучше:

$.getJSON("your_php_file", function(data) { ... }); 
+0

Я уже это сделал, но 'response.html_content' анализируется как' undefined'. Я думал, что это потому, что 'your_php_file' был уже выполнен во время загрузки файла (и JSON сгенерирован в то время тоже) – JackTheKnife

+0

Я предполагаю, что ваш PHP ломается где-то перед отправкой JSON. Попробуйте удалить логику загрузки и сначала верните JSON из PHP. –

+0

Как я уже упоминал в OP-PHP, код загружаемого файла отлично работает. Я могу загружать файлы и генерировать JSON в качестве ответа на каждый загруженный файл, но часть JavaScript не получает правильных данных. IMO Я не должен проверять 'your_php_file' с помощью JS, как уже было выполнено, и возвратил JSON обратно в браузер, но просто получил эти возвращенные данные. Вызов 'your_php_file' напрямую не вернет ничего, поскольку при этом файл точки не был загружен. – JackTheKnife