Сбой Ajax-вызова в функции закрытия диалогового окна yii
У меня есть эта проблема с использованием вызова ajax на функцию закрытия диалогового окна.
Вот моя функция вызова ajax:
function samplefunction(var1,var2){
$.ajax({
url: "controllerFunction?var1="+var1+"&var2="+var2,
type: 'POST',
dataType: 'json',
success: function(data)
{
$("#htmlmessage").html(data.message);
$("#htmlmsgdialog").dialog("open");
}
});
}
Вот код диалогового окна:
<?php
$this->beginWidget('zii.widgets.jui.CJuiDialog',array(
'id'=>'sampledialogboxname',
'options'=>array(
'title'=>'Sample Dialog Box I',
'autoOpen'=>false,
'modal'=>true,
'resizable'=>false,
'draggable'=>false,
'position'=>array("middle",30),
'width'=>650,
'show'=>'fade',
'hide'=>'fade',
'open' => 'js:function(event,ui){
//some code here
}',
**'close' => 'js:function(event,ui){
samplefunction("samplestring1","samplestring2");
window.location.href = "'.$sampleurl.'";
}',**
'buttons' => array
(
array('id' => 'firstback','text'=>'BACK',
'click'=> 'js:function(){
samplefunction("samplestring1","samplestring2");
$(this).dialog("close");
window.location.href = "'.$sampleurl.'";
}'),
array('id' => 'secondback','text'=>'BACK','click'=> 'js:function(){
//some code here
}'),
array('id' => 'thirdback','text'=>'BACK','click'=> 'js:function(){
//some code here
}'),
array('id' => 'fourthback','text'=>'BACK','click'=> 'js:function(){
//some code here
}'),
array('id' => 'firstnext','text'=>'NEXT','click'=> 'js:function(){
//some code here
}'),
array('id' => 'secondnext','text'=>'NEXT','click'=> 'js:function(){
//some code here
}'),
array('id' => 'thirdnext','text'=>'NEXT','click'=> 'js:function(){
//some code here
}'),
array('id' => 'save','text'=>'SAVE','click'=> 'js:function(){
//some code here
}')
),
),
));?>
Вот функция контроллера:
public function actionControllerFunction($var1, $var2)
{
var_dump($var1, $var2);
//Do Some Code here
$result['showdialog'] = true;
$result['message'] = "Sample Msg.";
echo json_encode($result);
exit;
}
Моя проблема заключается в том, что вызов ajax всегда терпит неудачу, даже прежде чем я войду в функцию контроллера. Я проверил мои параметры, он также имеет соответствующую строку для передачи. Мне очень нужна помощь. Любые комментарии, которые помогут мне в этом, высоко ценятся. Благодарю. (^__^)
1 ответ
Я думаю, что вам лучше всего исправить URL, к которому вы обращаетесь, с помощью функции ajax:
В файле просмотра
$sampleurl=Yii::app()->createUrl("controllerName/sampleFun");
$ajaxFun=Yii::app()->createUrl("controllerName/controllerFunction");
$ajaxReq = <<<JS
function samplefunction(var1,var2 ,dlg,refreshUrl){
$.ajax({
url: "$ajaxFun&var1="+var1+"&var2="+var2,
type: 'POST',
dataType: 'json',
success: function(data)
{
$("#htmlmessage").html(data.message);
$("#htmlmsgdialog").dialog("open");
}
});
if(dlg!=null ) $(dlg).dialog('close');
//window.location.href=refreshUrl
}
JS;
Обратите внимание на URL: url: "$ajaxFun&var1="+var1+"&var2="+var2,
дать контекстный контроллер SiteController
его URL-адрес должен быть таким:
site/controllerFunction&var1=abc&var2=def
полный URL будет:
index.php?r=site/controllerFunction&var1=abc&var2=def
в вашем случае вы ошиблись
index.php?r=site/controllerFunction?var1=abc&var2=def
Обратите внимание на два (?), Которые будут явно неправильными.
Предложение:
Исправьте функцию, отбросив аргументы
public function actionControllerFunction(){ //use $_POST array .... }
Отправлять данные как данные поста из функции функции function ajax samplefunction(var1,var2,dlg,refreshUrl){
$.ajax({ url: "$ajaxFun", data:"&var1="+var1+"&var2="+var2", type: 'POST', dataType: 'json', success: function(data) { $("#htmlmessage").html(data.message); $("#htmlmsgdialog").dialog("open"); } });
Заметка
url: "$ajaxFun",data:"&var1="+var1+"&var2="+var2",
Надеюсь, что это будет полезно читать дальше