2015-10-18 168 views
27

我有什么:CKEditor的无法解析JSON响应

  1. Symfony2的
  2. 的CKEditor与ImageEnhanced 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() 
      ) 
     ); 

后成功上载的图像I看到:

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响应,才使用文件上传从对话框,你必须使用正常的JavaScript响应

+1

谢谢@AlfonsoML。我需要在回应内容中写什么?这意味着什么 - **正常的JavaScript响应**? –

+2

“正常响应”是您找到的工作。多年来一直如此,只有新的粘贴系统使用JSON响应。例如,你可以在他们的文档http://docs.ckeditor.com/#!/guide/dev_file_browser_api-section-example-4和任何其他站点上找到解释如何在CKEditor中上传文件的信息 – AlfonsoML

4

他们有他们的example在第二编辑什么工作完全一样如你在更新

在响应他们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