web-dev-qa-db-ja.com

CKEditorはJSON応答を解析できません

私が持っているもの:

  1. Symfony2
  2. Image および Enhanced Image(also image2) アドオンを備えたCKEditor

公式サイト でサーバーへのファイルのアップロードに関する情報を見つけました:

例—画像アップロードプラグインの設定:

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

応答:ファイルが正常にアップロードされましたファイルが正常にアップロードされると、次のエントリを含むJSON応答が期待されます。

  • アップロード–1に設定します。
  • fileName –アップロードされたファイルの名前。
  • 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タイプapplication/jsonで転送されます: " http://example.com/app_dev.php/dashboard/settings/upload/image?CKEditor=example_post_content&CKEditorFuncNum=1&langCode=en "。

しかし、それは 公式ページ (2番目のエディターを参照)のように機能している必要があります

私は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;

しかし、動作しません。何か案が?

[〜#〜]更新[〜#〜]

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応答を使用した解決策が機能しない理由を知っていますか?

29
Max Lipsky

2番目のエディターの example にあるものは、[〜#〜] update [〜#〜]

それに応じて彼らはContent-Type: text/htmlそして内容は

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

したがって、別の解決策はありそうにありません。

4
Eugene Tiurin

JSON応答は、コンテンツに画像を貼り付ける場合にのみ使用されます。ダイアログからのファイルアップロードには、通常のjavascript応答を使用する必要があります。

6
AlfonsoML