Smarty JQuery / Ajax Call барьер - PullRequest
0 голосов
/ 31 августа 2010

Я модифицирую существующую систему, которая использует Smarty.Эта конкретная проблема вызывает основной камень преткновения, поскольку я просто не могу найти способ его обойти.

У меня есть сетка данных, у каждой записи есть действие, которое вызывает? Module = the_module & action = the_action.

Моя соответствующая функция the_module_the_action ($ postData, $ getData) используется для выполнения конкретного запроса.

Запрос на этот модуль поступает из запроса jQuery $ .ajax ({}), простопотому что я не хочу терять переменные формы поиска.Так что в случае успеха я перенаправлю страницу, используя document.location = 'index.php? Module = & action ='.

Это хорошо, так как позволяет мне определить, что действие было успешным, сохраняя при этомфильтры поиска по сетке.

Но у меня проблема, когда пользовательское действие не выполняется.Метод the_module_the_action ($ postData, $ getData) возвращает эхо 'success';exit () в случае успеха, но в случае ошибки он должен распечатать шаблон Smarty, то есть детали записи.

Я считаю, что проблема возникает из-за вызова через Ajax.Шаблон обслуживается, но, поскольку это вызов, выполненный с помощью Ajax, он не отображается.

Как обойти эту проблему?

Обновление: -

Этомоя функция, которую Ajax вызывает:

public function module_action($post_data) {
    $object=new Class((int)$post_data["id"]);
    if($object->method()) {
        echo "success";
        exit();
    }
    else {              
        $this->assignToSmarty('_someSmartyVar', $someData);
        $this->assignToSmarty('_data', $class->getData());
            echo "failed";
    }
}

Ajax, используемый для вызова этого: -

$(document).ready(function() {          
    $(".revokeButton").click(function(){
        var selected=$(this).attr('id');
        var filterBu = $('#filter_bu').val();
        var filterJc = $('#filter_jc').val();
        if(confirm("Are you sure you want to r.....")) {
            $.ajax({
                beforeSend: function() { },
                url: 'index.php?module=module&action=action',
                type: 'POST',
                data: ({ bid:selected }),
                cache: false,
                success: function(data, textStatus) { 
                    if(data == 'success') {
                        success_message = 'success';
                    } else if(data == 'failed') {
                        success_message = 'failed';
                    }
                    document.location='index.php?module=module&message='+success_message+'&filter_bu='+filterBu+'&filter_jc='+filterJc;
                }
            });
        }
    });
});

Успех и неудача успешно отражаются, но умные вещи не.

1 Ответ

1 голос
/ 01 сентября 2010

Я вижу две проблемы.Во-первых, вы, кажется, забыли вызов функции smarty->display() в ветви сбоя функции module_action.Во-вторых, вы написали:

if(data == 'success') {
    success_message = 'success';
} else if(data == 'failed') {
    success_message = 'failed';
}

Это всегда будет выводить только success или failure.Вы, вероятно, хотите сделать что-то вроде следующего:

if(data == 'success') {
    success_message = 'success';
} else {
    // if got here, 'data' doesn't contain "success!", so it must contain
    // something else, likely error data. You could either just display
    // data as it is or first do some sort of check to ensure that it
    // does, in fact, contain error data, and then display it.
    success_message = 'error!<br \>\n' + data; 
}
...