1

Тема: Как правильно сформировать AJAX response в формате JSON?

Что имеем: Symfony, Prototype и Starbox.
Делаю голосование через указанный выше Starbox.
Со стороны Symfony сделал action для голосования, поставил роутинг на
http://mysite.ru/vote

public function executeIndex($request) {      
        $this -> identity = $request -> getParameter('identity');
        $this -> rated = $request -> getParameter('rated');
        //Тут я работаю с базой - сохраняю параметры голосования
        //Ну и соответственно возвращаю какой-то ответ, для тестирование возвращаю те же самые значения
        $response = '{identity: '.$this -> identity.', rated: '.$this -> rated.'}';
        /*$this -> getResponse() -> setHttpHeader('Content-Type', 'application/json');*/ 
        $this -> getResponse() -> setContent($response);    
}

На клиентской стороне есть JavaScript функция vote

function vote(event) {
      new Ajax.Request('http://mysite.ru/vote', {
        parameters: event.memo,
        requestHeaders: {Accept: 'application/json'},
        onComplete: function(transport) {
            var responseJSON = transport.responseText.evalJSON();
            alert(transport.status);
            //alert('identity: ' + responseJSON.identity + '\n' + 'rated: ' + responseJSON.rated);
        }
      });
}

эта функция вызывается как только юзер проголосовал через Starbox.

В чем моя проблема:
не могу отдать в правильном формате JSON, alert(transport.status) пишет постоянно код 500. В бэкэнде пытался устанавливать разные Content-Type: application/json, text/json и пробовал вообще без установки дополнительных хидеров - ситуация та же самая, получаю код 500 и, соответственно, ни о каком ответе в формате JSON и речи не может быть.
Подскажите в чем может быть проблема и в каком направлении копать.

Re: Как правильно сформировать AJAX response в формате JSON?

Заглянь в errorlog веб-сервера и посмотри что он ругает, если в логе нет php ошибок, проверь php.ini на предмет наличия параметра log_errors = On

3

Re: Как правильно сформировать AJAX response в формате JSON?

Особого смысла заморачиваться с Response в формате JSON нет, можно отдать JSON напрямую не устанавливая никакх хидеров и респонсов.

Делаем так

   public function executeIndex($request) {      
        $this -> identity = $request -> getParameter('identity');
        $this -> rated = $request -> getParameter('rated');
        
        $response = '{"identity" : "'.$this -> identity.'", "rated" : "'.$this -> rated.'"}';

        return $this->renderText($response);
   }

ОБРАТИ внимание на то как записана строка $responce - у тебя не валидная запись для JSON была

ну и в javascript

  function vote(event) {
      new Ajax.Request('http://mysite.ru/vote', {
        parameters: event.memo,
        onComplete: function(transport) {
            var responseJSON = transport.responseText.evalJSON();
            alert(transport.status);
        }
      });
  }

4

Re: Как правильно сформировать AJAX response в формате JSON?

Как у вас с передачей русских букв? Проблем нет?

5

Re: Как правильно сформировать AJAX response в формате JSON?

С юникодом проблем небыло, цп - не использую

6

Re: Как правильно сформировать AJAX response в формате JSON?

а как насчет json_encode?

7

Re: Как правильно сформировать AJAX response в формате JSON?

у меня такая же проблема

есть js скрипт

            $.ajax({
                url: '/cabinet/applications/searchs/edit/',
                data: {
                    'sf_format': 'json',
                    'id': sel[1],
                    'name': a_input
                },
                dataType: 'json',
                success: function(data){
                    alert(data);
                }
            });

в routing.yml пишу

cabinet_apps_search_request_edit:
  url:      /:sf_culture/:region_code/cabinet/applications/searchs/edit/
  class:    myDomainRoute
  options:  { model: Auser, type: object }
  param:    { module: cabinetApps, action: editSearch }

а в функции EditSearch для модуля   cabinetApps  пишу

    public function executeEditSearch(sfWebRequest $request)
    {
        $auser_request_id = $request->getParameter('id');
        $name = $request->getParameter('name');

        $search_request = AuserTable::getInstance()->find($id);
        $search_request->setName($name);
        $search_request->save();

        $this->name=$name;
    }

в ответ получаю NetworkError: 500 Internal Server Error,  раньше все работало, а несколько дней назад начало выкидывать 500 ошибку. Может кто-то сталкивался в такой проблемой ?

8

Re: Как правильно сформировать AJAX response в формате JSON?

Во-первых, нахера страдать некрофилией и поднимать темы трехлетней давности, тем более, судя по вопросу - еще и не по первоначальной теме? Я по крайней мере не вижу ни строчки кода, который формирует json, вместо этого вижу вопрос про внезапно появившуюся 500 ошибку.

Во-вторых, в Симфони отладочный режим придумали не для того, чтобы на форум постили вопросы в стиле тупой секретарши. Нет бля, никто не сталкивался. Лог/трейс ошибки где? Когда вы научитесь задавать вопросы не для себя, а чтобы их еще хоть кто-то понял?.. Сложно запустить тот же урл в дев-режиме и получить вменяемую ошибку, из которой можно хоть что-то понять? Ошибка "NetworkError: 500 Internal Server Error" может появиться в 9000 случаев, вы же не ждете, что тут найдутся желающие вам их все перечислить?..

9

Re: Как правильно сформировать AJAX response в формате JSON?

во - первых, Jazo писал что он получает в ответ 500  ошибку, где тут не по теме?
во-вторых, я не прошу перечислить все 9000 случаев, а если никто не сталкивался, значит тема закрыта.

10

Re: Как правильно сформировать AJAX response в формате JSON?

Пиздец. Тебе популярно объяснить, что такое 500 ошибка? Да половину тем на этом форуме можно подписать к 500 ошибке. В мануал бля, читать основы!

11

Re: Как правильно сформировать AJAX response в формате JSON?

от Вас мне ничего не надо и не надо мне ничего объяснять

12

Re: Как правильно сформировать AJAX response в формате JSON?

Следующие вопросы в таком духе буду молча сносить. Прежде чем разбираться с Симфони, программисту следует научиться получать трейсбеки и составлять грамотные вопросы. И хоть поверхностно изучить основы, чтобы не выглядеть полным идиотом. Секретарш на этом форуме не будет.