У меня возникли проблемы с некоторыми AJAX
в yii
. Короче говоря, у меня есть вызов AJAX
, который возвращает кучу HTML
, т. Е. Таблицу позиций заказа. Возвращаемые данные представляют собой строки элементов заказа, и каждая из этих строк также имеет функции AJAX
. Например, вы добавляете элемент заказа, который возвращает нужный HTML
и добавляет элемент заказа к существующим элементам. Возвращенная строка для нового элемента имеет поле скидок, которое также работает с использованием AJAX
. Если я добавлю элемент, а затем попытаюсь ввести в поле скидки, то функция скидок AJAX
не будет вызываться в добавленной строке, но будет работать для существующих строк. Если я обновляю страницу, и элемент, конечно, присутствует, поле скидок отлично работает. Похоже, что все необходимое HTML
передано, но не JQUERY
для вызова AJAX
.Yii Ajax - поле возврата с Ajax
Вот несколько кодов, специально связанных с этой проблемой, снова это касается элементов заказа, но код специально позволяет создать строку и создает кнопку удаленияв конце строки. Эта кнопка не работает, пока страница не обновится.
мнение имеет следующее:
/*
** This is used to pull in the items.
*/
echo '<div id="order_items">';
echo OrderItems::model()->createEngineerOrderForm($model->order_id);
echo '</div>';
Вот пример кода в методе:
$field .= '<div class="small-1 columns">'.Chtml::textField('',$item->qty,array('disabled'=>true)).'</div>';
$field .= '<div class="small-1 columns">'.CHtml::ajaxLink(' ',Yii::app()->createUrl('Orders/removeOrderItem'),array(
'type'=>'POST',
'dataType'=>'json',
'data'=>array('item'=>$item->id),
'success'=>'function(data){
if(data.save == true)
{
$("#order_items").html(data.items)
$("#info-flash").html("<div class=\"alert-box success\">" + data.message + "<a href=\"#flash-div\" class=\"flash_close\" id=\"close_btn\"></a></div>");
$("#close_btn").click(function(){ $(".alert-box").fadeOut("slow"); });
return false;
}
else
{
$("#info-flash").html("<div class=\"alert-box alert\">" + data.message + "<a href=\"#flash-div\" class=\"flash_close\" id=\"close_btn\"></a></div>");
$("#close_btn").click(function(){ $(".alert-box").fadeOut("slow"); });
return false;
}
}'),
$htmlOptions=array ('class'=>'delete-button','confirm'=>($item->rl_products->is_installation == 2) ? Yii::t('app','misc.order_delete_install') : Yii::t('app','misc.order_delete'),'id'=>'delete_'.$item->id)).'</div>';
$field .= '</div>';
}
return $field;
Вот пример кода для удаления вызова:
if($item->save())
{
$linked = OrderItems::model()->findAll(array('condition'=>'linked = :linked AND status_id = 1 AND order_id = :order_id','params'=>array(':linked'=>$item->id,':order_id'=>$item->order_id)));
foreach($linked as $link)
{
$link->status_id = 3;
$link->save();
}
echo json_encode(array('save'=>true,'message'=>Yii::t('flash','orderitem_removal_success'),'items'=>OrderItems::model()->createEngineerOrderForm($item->order_id)));
}
Надеюсь, это имеет смысл, но любые вопросы дайте мне знать.
Update
Вот небольшой пример, который вы можете проверить, чтобы увидеть вопрос, который я имею в виду. Эффективно здесь у вас должна быть кнопка, кнопка A, вы нажимаете кнопку A и другую кнопку, появляется кнопка B. Затем вы нажимаете кнопку B, и она должна alert
«Успешно». Первый вызов ajax из Button A работает, но второй вызов ajax от Button B не работает.
Вот вида код:
<?php
echo CHtml::ajaxSubmitButton('Button-A',
CHtml::normalizeUrl(array('/Accounts/testAjax')),
array('success'=>'function(data)
{
$("#button-test").html(data);
}',
'type'=>'POST'),array('id'=>'button-a'));
?>
<div id="button-test"></div>
Вот контроллера кода:
public function actiontestAjax()
{
echo CHtml::ajaxSubmitButton('Button-B',
CHtml::normalizeUrl(array('/Accounts/testAjax2')),
array('success'=>'function(data)
{
alert(data);
}','type'=>'POST'),array('id'=>'button-b'));
}
public function actiontestAjax2()
{
echo successful;
}
Не могли бы вы включить код действия вашего контроллера, который используется для обработки вызова AJAX? – topher
@topher Я включил небольшой пример для тестирования, чтобы показать проблему. См. Раздел обновления моего вопроса. –