Форум программистов, компьютерный форум, киберфорум
PHP: Symfony
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/33: Рейтинг темы: голосов - 33, средняя оценка - 4.85
.NET ONLY
 Аватар для DEA7H
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495

Ajax запросы в Symfony 2

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

Студворк — интернет-сервис помощи студентам
Здравствуйте.

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

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

Заранее благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.07.2013, 21:01
Ответы с готовыми решениями:

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

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

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

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

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

Не по теме:

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

1
694 / 534 / 40
Регистрация: 22.06.2009
Сообщений: 1,293
01.08.2013, 10:18
KOPOJI, не знал. Спасибо.
В любом случае пользоваться не стал бы. Я js даже от html стараюсь отделять, не то что от php.
0
.NET ONLY
 Аватар для DEA7H
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495
01.08.2013, 10:21  [ТС]
Цитата Сообщение от Alorian Посмотреть сообщение
А какое отношение к созданию XMLHttpRequest имеет symfony?
Я не говорил что этот компонент имеет какое-то отношение к Symfony. Я говорил что нигде нет примеров такого использования. Значит может правильнее будет как-то по другому. Спрашивал я именно о чем то типа этого:
Цитата Сообщение от KOPOJI Посмотреть сообщение
большинство фреймворков имеют готовые компоненты для быстрого создания AJAX-запросов. Например, в Yii это такое http://www.yiiframework.com/doc/api/1.1/CHtml#ajax
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
01.08.2013, 10:34
зря, удобно. К примеру, такой код
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/... orm=Propel
1
.NET ONLY
 Аватар для DEA7H
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495
01.08.2013, 10:37  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Спасибо. Почитаем.
0
694 / 534 / 40
Регистрация: 22.06.2009
Сообщений: 1,293
01.08.2013, 11:11
Цитата Сообщение от KOPOJI Посмотреть сообщение
зря, удобно
А в чем удобство? Какая то дикая смесь html, php и js. В чем преимущества?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
01.08.2013, 11:21
Где вы увидели дикую смесь?
И фреймворки вообще не нужны? Ведь даже простая ajax-пагинация, по сути, есть ничто иное, как смесь php, html и js. Впрочем, не буду спорить, не хотите использовать одно из преимуществ фреймворков - ваше право
0
694 / 534 / 40
Регистрация: 22.06.2009
Сообщений: 1,293
01.08.2013, 11:43
Цитата Сообщение от KOPOJI Посмотреть сообщение
Ведь даже простая ajax-пагинация, по сути, есть ничто иное, как смесь php, html и js.
Почему ajax-пагинация обязательно смесь? Можно же отдельно сделать.
В action собираем данные в зависимости от поступившего запроса.
В шаблоне данные превращаем в html
В js файле повесили обработчики на ссылки из пагинации и отправляем запросы по клику.
Все на своих местах.

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

Но кому-то нравится наверное. Не зря же функцию сделали.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
01.08.2013, 12:43
Кликните здесь для просмотра всего текста
Цитата Сообщение от 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
694 / 534 / 40
Регистрация: 22.06.2009
Сообщений: 1,293
01.08.2013, 13:35
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.08.2013, 13:35
Помогаю со студенческими работами здесь

Запросы AJAX
Добрый день) Нужна помощь. На странице есть два поля ввода и кнопка-переключатель знаков &quot;+&quot; и &quot;-&quot; (при нажатии)....

Ajax запросы
Всем добрый день не могу понять как посылать правильно запросы серверу Вот содержимое файла index.html &lt;!DOCTYPE html PUBLIC...

Ajax запросы в БД mysql
Уважаемые форумчане, прошу помощи, т.к. сам не разбираюсь особо, да и оно мне как-то не очень пока что. Вообщем есть мелкий локальный...

Периодические ajax запросы
Добрый вечер. подскажите а как можно организовать периодическое обновление страницы. каждых 5 секунд. через ajax Запросы?

Как сделать ajax запросы
Здравствуйте! Как в приложений сделать ajax запросы?


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru