Сбой 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

Обратите внимание на два (?), Которые будут явно неправильными.

Предложение:

  1. Исправьте функцию, отбросив аргументы

    public function actionControllerFunction(){ //use $_POST array .... }

  2. Отправлять данные как данные поста из функции функции 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",

Надеюсь, что это будет полезно читать дальше

Другие вопросы по тегам