Подтвердить что ты не робот

CKEditor не может разобрать ответ JSON

Что у меня:

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

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

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

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

  • uploaded - установите значение 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()
            )
        );

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

введите описание изображения здесь

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

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

Но он должен работать как на официальной странице (см. второй редактор)

Я попытался вернуть другой ответ от 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 не работает?

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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