Вызов AJAX и данные JSON - PullRequest
       4

Вызов AJAX и данные JSON

0 голосов
/ 01 августа 2010

Добрый день!

Я учусь создавать вызовы AJAX для скриптов PHP.

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

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

Итак ... Я использую фреймворк KohanaPHP (но также собираюсь изучить ZendFramework).Я создал тестовый контроллер со следующим кодом:

public function __construct() 
{
    if (request::is_ajax()) {
        $this->auto_render = FALSE;
        header('content-type: application/json');
    }
}

public function index()
{
    $result['success'] = 1;

    $test_model = new Test_Model;
    $items = $test_model->get_test_rows();
    foreach($items as $item):
        $rows[] = $item;
    endforeach;     
    $result['rows'] = json_encode($rows);

    if (request::is_ajax()) {
        echo json_encode($result);
    }
}

Теперь у меня есть несколько вопросов, связанных с этим кодом.Позвольте мне спросить их.

1) В упомянутой выше теме мне сказали, что мне не нужно использовать функцию $.parseJSON();, и я могу вместо нее использовать data.rows[0]name.К сожалению, это не работает.Поскольку это не большая проблема, я могу использовать $.parseJSON();, но я хотел бы знать, есть ли какая-либо ошибка в моем коде PHP?

2) Я пытаюсь изучить хорошие практики и методыи я стараюсь не нарушать правила MVC.У меня есть вопрос, связанный с MVC.Можно ли использовать echo() в контроллерах?Вы можете заметить, что я использую его для возврата данных в кодировке JSON.

Ответы [ 3 ]

1 голос
/ 01 августа 2010

Чтобы ответить на вопрос (2): Да, обычно это echo в контроллере.Я бы даже зашел так далеко, чтобы сказать, что это плохая форма для построения какой-либо строки контроллера.

Однако, в случае, когда все, что выводится, это json, я думаю, что это просто проще и более краткопросто echo json_encode($results); Если вы действительно хотите быть пуристом MVC, вы всегда можете создать файл, который ничего не делает, кроме echo json(...);.

1 голос
/ 01 августа 2010

1) jQuery.ajax Функция достаточно умна, чтобы анализировать ваш ответ JSON при условии, что вы сообщаете ей, что возвращаете объект, содержащий JSON.Вот как ваш бэкэнд Kohana может сообщить вашему внешнему jQuery, что они говорят в JSON, в вашем контроллере:

$this->request->headers['Content-Type'] = 'application/json';

2) Нет ничего плохого в использовании echo, но поскольку вы используете Kohana, рекомендуетсяспособ возврата ответа клиенту браузера изнутри контроллера:

$this->request->response = json_encode($result);
0 голосов
/ 01 августа 2010

В вашем коде:

$result['rows'] = json_encode($rows);

if (request::is_ajax()) {
    echo json_encode($result);
}

Я бы сказал, что это должно быть:

$result['rows'] = $rows;

if (request::is_ajax()) {
    echo json_encode($result);
}

Я не знаю, какова цель is_ajax, но это может быть излишнимпроверять.Но, вероятно, происходило то, что вы кодировали строки, а затем кодировали весь набор результатов.Поэтому, когда дело дошло до синтаксического анализа и вы выполнили parseJSON, вам нужно будет сделать это снова для индекса строки массива.

...