2015-10-18 3 views
27

Что у меня есть:CKEditor не может разобрать ответ JSON

  1. Symfony2
  2. CKEditor с Image и Enhanced Image (also image2) аддонов

Я нашел информацию о загрузке файлов на сервер на official site:

Пример - Настройка модуля загрузки изображений:

config.extraPlugins = 'uploadimage'; 
config.imageUploadUrl = '/uploader/upload.php?type=Images'; 

Ответ: Файл успешно загружен При загрузке файла успешно затем JSON ответ со следующими записями в ожидается:

  • закачано - Установите 1.
  • имя_файла - Имя загружаемого файла.
  • url - URL-адрес загруженный файл (URL-код).

Пример:

{ 
    "uploaded": 1, 
    "fileName": "foo.jpg", 
    "url": "/files/foo.jpg" 
} 

Symfony возвращает JSON: товару

return new JsonResponse(
      array(
       'uploaded' => '1', 
       'fileName' => $image->getName(), 
       'url'  => $image->getWebPath() 
      ) 
     ); 

После успешной загрузки изображения я вижу:

enter image description here

И ошибка в JS консоли:

Ресурс интерпретируется как документ, но передаются с MIME тип приложения/JSON: "http://example.com/app_dev.php/dashboard/settings/upload/image?CKEditor=example_post_content&CKEditorFuncNum=1&langCode=en".

Но он должен работать как на official page (см второй редактор)

Я попытался вернуть другой ответ от Symfony, как:

$response = new Response(); 
     $response->headers->set('Content-Type', 'application/json'); 

     $response->setContent(
      json_encode(
      array(
       'uploaded' => '1', 
       'fileName' => $image->getName(), 
       'url'  => $image->getWebPath() 
      ) 
     )); 

     return $response; 

, но не работает. Есть идеи?

UPDATE

Я решил проблему с помощью answer. Окончательный FCKeditor код выглядит следующим образом:

$response = new Response(); 

$response->headers->set('Content-Type', 'text/html'); 

$content = "<script type=\"text/javascript\">\n"; 
$content .= "window.parent.CKEDITOR.tools.callFunction(1, '".$image->getWebPath()."', '');\n"; 
$content .= "</script>"; 

$response->setContent($content); 

return $response; 

Кто-нибудь знает другое решение или почему решение с ответом JSON не работает?

+0

Можете ли вы показать код js, который вызывает бэкэнд? –

+0

Почему есть знак доллара в '$ return new JsonResponse' – chiliNUT

+0

@chiliNUT только ошибка копирования-вставки –

ответ

5

JSON ответ используется только при вставке изображения в содержании, для загрузки файлов из диалогов вы должны использовать обычный яваскрипт ответ

+1

Спасибо @AlfonsoML. Что мне нужно написать в контенте ответа? Что это значит - ** нормальный ответ javascript **? –

+2

«Обычный ответ» - это тот, который вы нашли, который работает. Так было много лет, и только новая система пасты использует ответ JSON. Вы можете найти это, например, в своих документах http://docs.ckeditor.com/#!/guide/dev_file_browser_api-section-example-4 и на любом другом сайте, где объясняется, как загружать файлы в CKEditor – AlfonsoML

4

То, что они имеют в своем example во втором редакторе работает точно так же, как вы положили в свой UPDATE.

В ответ они Content-Type: text/html и содержание

<script type="text/javascript"> 
    window.parent.CKEDITOR.tools.callFunction("92", "\/userfiles\/images\/side-nav.jpg", ""); 
</script> 

Так что вряд ли будет другое решение.

+0

Да, это правда, но я думаю, что есть другое решение, потому что у вас есть прямой доступ к событиям CKEditor. –

+0

Если вы спрашиваете, почему существует набор номеров «92», откройте это [doc] (https://docs-old.ckeditor.com/CKEditor_3.x/Developers_Guide/File_Browser_ (Uploader)/Custom_File_Browser), чтобы прочитать об этом. – dikirill

Смежные вопросы