Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CKEditor can not parse JSON response

What I have:

  1. Symfony2
  2. CKEditor with Image and Enhanced Image (also image2) addons

I found information about uploading files to server on official site:

Example — Setting Up Image upload plugin:

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

Response: File Uploaded Successfully When file is uploaded successfully then JSON response with the following entries is expected:

  • uploaded – Set to 1.
  • fileName – Name of uploaded file.
  • url – URL to a uploaded file (URL-encoded).

Example:

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

Symfony returns JSON responce:

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

After successfully uploaded an image I see:

enter image description here

And error in JS console:

Resource interpreted as Document but transferred with MIME type application/json: "http://example.com/app_dev.php/dashboard/settings/upload/image?CKEditor=example_post_content&CKEditorFuncNum=1&langCode=en".

But it must be working like on the official page (see second editor)

I tried to return other response from Symfony, like:

$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; 

but not works. Any idea?

UPDATE

I resolved the problem by using answer. Final FCKeditor code look like:

$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; 

Does anyone know another solution or why solution with JSON response doesn't work?

like image 847
Max Lipsky Avatar asked Oct 18 '15 10:10

Max Lipsky


Video Answer


2 Answers

The JSON response is used only when you paste an image in the content, for file uploads from the dialogs you must use the normal javascript response

like image 184
AlfonsoML Avatar answered Sep 22 '22 02:09

AlfonsoML


What they have in their example in the second editor works exactly the same as you put in your UPDATE.

In response they have Content-Type: text/html and content is

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

So, there's unlikely to be another solution.

like image 38
Eugene Tiurin Avatar answered Sep 22 '22 02:09

Eugene Tiurin