2015-10-18 170 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