2015-10-18 16 views
27

Co mam:CKEditor nie można analizować odpowiedzi JSON

  1. Symfony2
  2. CKEditor z Image i Enhanced Image (also image2) Świat

znalazłem informacji o przesyłaniu plików na serwerze, na official site:

Przykład - Ustawianie wtyczki wysyłania obrazu:

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

Response: Plik został pomyślnie przesłany Gdy plik zostanie wysłany powodzeniem następnie odpowiedź JSON z następujących wpisów jest spodziewanych:

  • dodane - Zestaw do 1.
  • fileName - Nazwa przesłanego pliku.
  • adres URL - URL do przesłanego pliku o adresie URL ( ).

przykład:

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

Symfony powraca JSON responce:

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

Po pomyślnym przekazaniu obrazu widać:

enter image description here

i błędów w konsoli JS:

zasobów interpretować jako dokument, ale przeniesione z typem MIME application/json : "http://example.com/app_dev.php/dashboard/settings/upload/image?CKEditor=example_post_content&CKEditorFuncNum=1&langCode=en".

Ale trzeba pracować jak na official page (patrz drugi edytor)

Próbowałem wrócić inna odpowiedź Symfony, jak:

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

ale nie prac. Dowolny pomysł?

UPDATE

I rozwiązał problem za pomocą answer. Kod końcowy wygląd FCKeditor jak:

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

Czy ktoś zna inne rozwiązanie lub dlaczego rozwiązanie z odpowiedzi JSON nie działa?

odpowiedź
+0

Czy możesz pokazać kod js, który wywołuje backend? –

+0

dlaczego istnieje znak dolara w '$ return new JsonResponse' – chiliNUT

+0

@chiliNUT tylko błąd kopiuj-wklej –

Odpowiedz

5

JSON jest używany tylko wtedy, gdy wkleić obraz w treści, do wysyłania plików z okien dialogowych należy użyć normalnej odpowiedzi javascript

+1

Dzięki @AlfonsoML. Co muszę napisać w treści odpowiedzi? Co to znaczy - ** normalna odpowiedź javascript **? –

+2

"Normalna reakcja" to ta, którą znaleziono, która działa. Tak było przez wiele lat i tylko nowy system wklejania wykorzystuje odpowiedź JSON. Można to znaleźć na przykład w ich dokumentach http://docs.ckeditor.com/#!/guide/dev_file_browser_api-section-example-4 iw każdej innej witrynie wyjaśniającej, jak przesłać pliki w CKEditorze – AlfonsoML

4

Co oni mają w swoich example w drugim edytorze działa dokładnie tak samo jak wprowadzasz swój UPDATE.

W odpowiedzi mają Content-Type: text/html i treść jest

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

Tak, tam jest mało prawdopodobne, aby być inne rozwiązanie.

+0

Tak, to prawda, ale myślę, że mam inne rozwiązanie, ponieważ masz bezpośredni dostęp do zdarzeń CKEditor. –

+0

Jeśli zapytasz, dlaczego jest ustawiony numer "92", otwórz ten [doc] (https://docs-old.ckeditor.com/CKEditor_3.x/Developers_Guide/File_Browser_ (Uploader)/Custom_File_Browser), aby przeczytać o tym. – dikirill

Powiązane problemy