2015-02-10 5 views
2

Мой Ajax вызов:Ошибка разбора JSON возвращается через JsonResponse Symfony компонента

$.ajax({ 
    url : path, 
    type: 'POST', 
    dataType : 'json', 
    data: data, 
    success: function(memberExtra) { 
     console.log (memberExtra); 
    } 
}); 

Мой ответ:

HTTP/1.0 201 Created 
Cache-Control: no-cache 
Content-Type: application/json 
Date:   Tue, 10 Feb 2015 23:49:09 GMT 

{"memberExtras":{"label":"seller","dropdown":"abc"}} 

Мой PHP:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\JsonResponse; 

/** 
* Update the pulldown menus. 
* 
* @Route("/classification", name="classification") 
* @Template() 
*/ 
public function classificationAction(Request $request) 
{ 
    $memberType = $request->request->get('classification'); 

    $label = $memberType["user"]["memberType"]; 
    $dropdown = "abc"; 
    $response = new Response(json_encode(array('memberExtras' => array(
     'label' => $label, 
     'dropdown' => $dropdown, 
    ))), Response::HTTP_CREATED); 
    $response->headers->set('Content-Type', 'application/json'); 

    return new Response($response); 
} 

console.log Безразлично» t выводит что угодно. Даже если регулярное текстовое выражение, например («тест»).

Если удалить DATATYPE: '' JSon декларации и попытки вручную анализировать данные с помощью $ .parseJSON (memberExtra), я получаю эту ошибку:

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data 

Не удивляйтесь. В принципе, кажется, что парсер попадает в заголовок, возвращенный классом Symfony. Как я могу избежать этого заголовка и просто попасть в JSON?

Спасибо!

+0

быстрого примечания, не смотрит, как на самом деле вы используете 'JsonResponse' ... – castis

+1

попытаться просто' возвращение $ ответа 'вместо' вернуть новый ответ ($ ответ); ' BTW Я предлагаю вам просто использовать' return new JsonResponse ($ myarray) 'и удалить аннотацию' @ Template' из вашего метода. Надеюсь эта помощь – Matteo

+1

@Matteo - Это было! Просто просматривая код снова и снова, я не мог видеть такую ​​глупую ошибку. Спасибо, что одалживал тебе глаза. Я также буду учитывать ваши другие предложения. Очень ценим! –

ответ

0

попробовать просто:

return $response;

вместо возвращения

new Response($response);

КСТАТИ Я предлагаю вам просто использовать

return new JsonResponse($myarray) 

и удалить аннотацию @Template из метода.

Надеется, что это поможет

0

Заменить return new Response($response); с return $response;

Основной синтаксис:

$response = new Response(); 

$response->setContent(json_encode(array(
    'id' => $entity->getId(), 
    'other' => $entity->getOther(), 
))); 

$response->headers->set('Content-Type', 'application/json'); 

return $response;