Форум программистов, компьютерный форум, киберфорум
Наши страницы

PHP: Фреймворки

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.85
DEA7H
.NET ONLY
64 / 64 / 1
Регистрация: 05.10.2011
Сообщений: 495
#1

Ajax запросы в Symfony 2 - PHP

31.07.2013, 21:01. Просмотров 3939. Ответов 11
Метки нет (Все метки)

Здравствуйте.

Как в Symfony правильно использовать AJAX? Тоесть, как мне асинхронно сделать запрос к определенному Action-у контроллера и получить ответ?

А то сколько искал в мануалах да и вообще, нигде не видел создание XMLHttpRequest(). Так вот и думаю, может Symfony позволяет осуществлять асинхронные запросы как-то по своему?

Заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2013, 21:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ajax запросы в Symfony 2 (PHP):

Перенаправить запросы в подпапку Symfony 3.2 - PHP
Все как бы гениально просто и типично)) 100500 туториалов, но ни один не показывает, как без переписи путей и редактирования файлов,...

Как отправить Ajax в Symfony - PHP
Всем привет. Подскажите как в Symfony правильно отправлять Ajax запросы. Делаю так $.ajax({ type: 'POST', ...

Doctrine | Symfony | Lazy | ajax Очень много страшных слов - PHP
Здравствуйте, помогите пожалуйста сделать красиво и правильно. Есть страница товара и сущность товар с тьма таракань LAZY связями ...

Как в Yii адресовать и правильно принять Ajax запросы в рамках одного action? - PHP
Добрый день, 1. Есть необходимость принимать в рамках текущего action несколько Ajax запросов. В случае с одним запросом -...

Кроссдоменные запросы через Ajax - PHP
Есть два сайта, оба находятся в моём распоряжении. Есть необходимость отправить Ajax с одного сайта на другой. Но Ajax этого сделать...

регулярные Ajax запросы: флаг обновления данных через файлы? - PHP
подробно объяснять не буду - суть вопроса такова: Есть потребность синхронизировать 4х юзеров между собой... Каждый из них с...

11
Alorian
691 / 531 / 22
Регистрация: 22.06.2009
Сообщений: 1,291
01.08.2013, 06:17 #2
Цитата Сообщение от DEA7H Посмотреть сообщение
нигде не видел создание XMLHttpRequest()
А какое отношение к созданию XMLHttpRequest имеет symfony?
Для работы ajax нужны две стороны — клиентская и серверная.
Symfony работает на сервере, объект xmlhttprequest создается на клиенте, в браузере, с помощью javascript.

Для работы ajax нужно чтобы клиент сделал обычный GET или POST запрос на сервер. На сервере уже в зависимости от запроса отработается определенный action. Что вернется на клиент зависит уже от этого конкретного action. Можно json вернуть, можно кусок html, можно xml. Смотря что вы в action напишите.
0
KOPOJI
01.08.2013, 09:37
  #3

Не по теме:

Alorian, большинство фреймворков имеют готовые компоненты для быстрого создания AJAX-запросов. Например, в Yii это такое http://www.yiiframework.com/doc/api/1.1/CHtml#ajax

1
Alorian
691 / 531 / 22
Регистрация: 22.06.2009
Сообщений: 1,291
01.08.2013, 10:18 #4
KOPOJI, не знал. Спасибо.
В любом случае пользоваться не стал бы. Я js даже от html стараюсь отделять, не то что от php.
0
DEA7H
.NET ONLY
64 / 64 / 1
Регистрация: 05.10.2011
Сообщений: 495
01.08.2013, 10:21  [ТС] #5
Цитата Сообщение от Alorian Посмотреть сообщение
А какое отношение к созданию XMLHttpRequest имеет symfony?
Я не говорил что этот компонент имеет какое-то отношение к Symfony. Я говорил что нигде нет примеров такого использования. Значит может правильнее будет как-то по другому. Спрашивал я именно о чем то типа этого:
Цитата Сообщение от KOPOJI Посмотреть сообщение
большинство фреймворков имеют готовые компоненты для быстрого создания AJAX-запросов. Например, в Yii это такое http://www.yiiframework.com/doc/api/1.1/CHtml#ajax
0
KOPOJI
Эксперт HTML/CSSЭксперт PHP
16701 / 6623 / 433
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
01.08.2013, 10:34 #6
зря, удобно. К примеру, такой код
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
echo CHtml::ajaxLink(
    'Текст ссылки',
    Yii::app()->createUrl( 'контроллер/метод' ),
    array(
        'type' => 'POST',
        'beforeSend' => 'function( request )
        {
            alert("Бла бла бла");
        }',
        'success' => 'function( data )
        {
            $("#mposter").html(data);// получили данные - обновили DIV
        }',
        'data' => array( 'val1' => '1', 'val2' => '2' ), // посылаем значения
        'cache'=>'false' // если нужно можно закешировать
    ),
    array(
        'href' => Yii::app()->createUrl( 'ajax/new_link' ),// подменяет ссылку на левую
        'class' => "someclass" // добавляем какой-нить класс для оформления
    )
);
Генерирует
HTML5
1
<a href="/сайт.ru/ajax/new_link/" class="someclass" id="yt1">Текст ссылки</a>
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
<script type="text/javascript">
/*<![CDATA[*/
jQuery(function($) {
jQuery('body').on('click','#yt1',function(){jQuery.ajax({'type':'POST','beforeSend':function( request )
        {
            alert("Бла бла бла");
        },'success':function( data )
        {
            $("#mposter").html(data);// получили данные - обновили DIV
        },'data':{'val1':'1','val2':'2'},'cache':'false','url':'/сайт.ру/контроллер/метод/'});return false;});
});
/*]]>*/
</script>
Предварительно подключая jquery (если он еще не был подключен).
Удобно же

Добавлено через 4 минуты
http://habrahabr.ru/post/149378/
http://symfony.com/legacy/doc/jobeet/1_2/ru/18?orm=Propel
1
DEA7H
.NET ONLY
64 / 64 / 1
Регистрация: 05.10.2011
Сообщений: 495
01.08.2013, 10:37  [ТС] #7
Цитата Сообщение от KOPOJI Посмотреть сообщение
Спасибо. Почитаем.
0
Alorian
691 / 531 / 22
Регистрация: 22.06.2009
Сообщений: 1,291
01.08.2013, 11:11 #8
Цитата Сообщение от KOPOJI Посмотреть сообщение
зря, удобно
А в чем удобство? Какая то дикая смесь html, php и js. В чем преимущества?
0
KOPOJI
Эксперт HTML/CSSЭксперт PHP
16701 / 6623 / 433
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
01.08.2013, 11:21 #9
Где вы увидели дикую смесь?
И фреймворки вообще не нужны? Ведь даже простая ajax-пагинация, по сути, есть ничто иное, как смесь php, html и js. Впрочем, не буду спорить, не хотите использовать одно из преимуществ фреймворков - ваше право
0
Alorian
691 / 531 / 22
Регистрация: 22.06.2009
Сообщений: 1,291
01.08.2013, 11:43 #10
Цитата Сообщение от KOPOJI Посмотреть сообщение
Ведь даже простая ajax-пагинация, по сути, есть ничто иное, как смесь php, html и js.
Почему ajax-пагинация обязательно смесь? Можно же отдельно сделать.
В action собираем данные в зависимости от поступившего запроса.
В шаблоне данные превращаем в html
В js файле повесили обработчики на ссылки из пагинации и отправляем запросы по клику.
Все на своих местах.

А вот в коде который приведен выше нужно знать последовательность параметров функции-генератора. Я бы не хотел потом это редактировать, да еще и без подсветки синтаксиса.

Но кому-то нравится наверное. Не зря же функцию сделали.
0
KOPOJI
Эксперт HTML/CSSЭксперт PHP
16701 / 6623 / 433
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
01.08.2013, 12:43 #11
Кликните здесь для просмотра всего текста
Цитата Сообщение от Alorian Посмотреть сообщение
Все на своих местах.
Да, только, если следовать стандартной структуре, то у вас будет один общий шаблон, вы редактируете только часть с контентом (в основном).
Итого, получается несколько возможных вариантов:
1. На всех страницах будет подключаться один и тот же скрипт (к примеру, слайдер картинок), т.к. придется закинуть его в лайоут, чтобы он был "на месте" (для валидатора)
2. Писать скрипт "не на месте" - посередине контента.
Цитата Сообщение от Alorian Посмотреть сообщение
А вот в коде который приведен выше нужно знать последовательность параметров функции-генератора
1. Не нужно, их можно размещать в любом порядке.
2. Документации полно.
3. Без подсветки синтаксиса - только часть кода(js). При желании этот код можно скопировать и отредактировать с подсветкой, а затем заменить обратно.
4. Имхо, куда удобнее писать интутивно понятный код
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_viewBuy',
       /* 'sortableAttributes'=>array(
                'ads_name',
        ),*/
       'summaryText' => 'Отображены записи с <b>{start}</b> по <b>{end}</b> из <b class="count_list">{count}</b>',
        //'sorterHeader' => 'Сортировать по',
        'pager' => array(
            'firstPageLabel'=>'&laquo;&laquo;',
            'prevPageLabel'=>'&laquo;',
            'nextPageLabel'=>'&raquo;',
            'lastPageLabel'=>'&raquo;&raquo;',
            'maxButtonCount'=>'10',
            'header'=>'<span>Страницы:</span>',
            //'cssFile'=>false,
       ),
        'ajaxUpdate' => false,
        'enableHistory'=>true,
)); ?>
Нежели писать кучу кода на js (а ведь здесь автоматическая ajax-пагинация, с использованием history API)
Куда удобнее выводить форму, где идет автоматическая проверка корректности заполнения полей всего парой команд, нежели кучей кода. К тому же возможна гибкая настройка как правил валидации, так и сообщений об ошибках.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
$change = array(
                    'type'  =>  'POST',
                    'url'   =>  CController::createUrl('upload/type'),
                    'data'  => array(
                        'type_id' => 'js:this.value',
                    ),
                    'dataType'  => 'json',
                    'success'   => 'function (data)
                                    {
                                        document.getElementById("first").innerHTML = data.first
                                        document.getElementById("second").innerHTML = data.second
                                    }'
                );
...........
 
$form=$this->beginWidget('CActiveForm', array(
            'id'=>'upload-form',
            'enableClientValidation'=>true,
            'clientOptions'=>array(
                    'validateOnSubmit'=>true,
                    'validateOnChange'=>true,
            ),
            'htmlOptions' => array('enctype' => 'multipart/form-data'),
    )); ?>
<div class="row">
<?php
echo $form->labelEx($model, 'type');
echo $form->dropDownList($model,'type',$select,array('onChange'=>CHtml::ajax($change)));
echo $form->error($model, 'type');
?>
</div>
HTML5
1
2
3
4
5
6
7
<select onchange="jQuery.ajax({'type':'POST','url':'/ads/upload/type/','data':{'type_id':this.value},'dataType':'json','success':function (data)
{
    document.getElementById(&quot;first&quot;).innerHTML = data.first
    document.getElementById(&quot;second&quot;).innerHTML = data.second
},'cache':false});" name="Upload[type]" id="Upload_type">
<option..............
</select>
Javascript
1
2
3
4
5
6
7
8
9
/*<![CDATA[*/
jQuery(function($) {
$('#upload-form').yiiactiveform({'validateOnSubmit':true,'validateOnChange':true,'attributes':[{'id':'Upload_type','inputID':'Upload_type','errorID':'Upload_type_em_','model':'Upload','name':'type','enableAjaxValidation':false,'clientValidation':function(value, messages, attribute) {
 
if($.trim(value)=='') {
    messages.push("\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f");
}
});
/*]]>*/
Я правда не понимаю, как можно не пользоваться таким возможностями (в чем смысл с использования фреймворка тогда вообще? "Чтоб было"?)
0
Alorian
691 / 531 / 22
Регистрация: 22.06.2009
Сообщений: 1,291
01.08.2013, 13:35 #12
Цитата Сообщение от KOPOJI Посмотреть сообщение
Итого, получается несколько возможных вариантов:
1. На всех страницах будет подключаться один и тот же скрипт (к примеру, слайдер картинок), т.к. придется закинуть его в лайоут, чтобы он был "на месте" (для валидатора)
2. Писать скрипт "не на месте" - посередине контента.
Во первых, вовсе необязательно подключать скрипт на все страницы. Например в symfony можно объявить блок внутри head и потом из любого контроллера добавлять в него вызов js-скрипта. То есть скрипт будет добавлен только после выполнения соответствующего action, если action не выполняется, то и скрипт в область head не подставляется.

Во вторых, я ничего не вижу плохого в том, чтобы js скрипт был посередине контента. Перед или лучше даже сразу после того html кода с которым он работает. В этом случае не потребуется проверка window.onload или $(document).ready(). Вполне нормальная ситуация, хотя я стараюсь выносить все в head.

Цитата Сообщение от KOPOJI Посмотреть сообщение
4. Имхо, куда удобнее писать интутивно понятный код
...
Нежели писать кучу кода на js (а ведь здесь автоматическая ajax-пагинация, с использованием history API)
Может для вас этот код и является интуитивно понятным, но для меня нет. Вызывается какой то виджет, в него передается непонятная переменная $dataProvider и задаются какие то параметры.
Почему я сразу должен этот код понять, не знаю.

Цитата Сообщение от KOPOJI Посмотреть сообщение
Я правда не понимаю, как можно не пользоваться таким возможностями (в чем смысл с использования фреймворка тогда вообще? "Чтоб было"?)
Мне еще с wordpress не нравятся подобные методы. Под каждую какую то мелкую операцию написана микро функция, которая должна упростить программирование. Мне кажется это сомнительным. Фреймворк предоставляет удобный механизм хранения данных, структурирует код. Кроме того фреймворк предоставляет какой то готовый функционал. Это безусловно. Но вот степень готовости может отличаться, и здесь мы с вами расходимся во мнении.

Например, генерировать код для отправки ajax запросов мне кажется излишним, это во первых ограничивает программиста, а во вторых значительно снижает читабельность (выносить js код из php в отдельное место с подсветкой синтаксиса и потом возвращать это удобно, ага).

Насчет пагинации я не уверен, если там можно просто сделать запрос к бд, и потом отдать результат запроса в какой то черный ящик, а на выходе мы получим html списка с ajax пагинацией, то это может быть удобно. Здесь не уверен, надо пробовать. Может там какой то неустраивающий меня html будет генерироваться, и будет проще вручную самому написать, чем исправить готовое.
0
01.08.2013, 13:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2013, 13:35
Привет! Вот еще темы с ответами:

Не работают некоторые запросы в БД из PHP через AJAX с HTML страницы - PHP
Делаю сайт отеля, где есть возможность сложного поиска по номерам отеля, который кстати говоря работает полностью. А также возможность в...

Symfony 2.* - PHP
Всем привет. Недавно начал изучать Symfony. Я так думаю у меня будет возникать много вопросов. Поэтому и создаю эту тему! Если решения...

Symfony 2 - PHP
Я новичок в symfony и поэтому решил посоветоватся с теми у кого больше опыта . Нужно написать админку , но я не могу выбрать правильный...

Книжка о Symfony - PHP
Кто-то может посоветовать какуе-то книжку кто можно прочитать о Symfony, или какуе-то хорошую статью, но лучше книжку


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru