Smarty jQuery / Ajax调用障碍

时间:2010-08-31 14:37:54

标签: ajax smarty

我正在修改使用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)返回echo'成功'; 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 个答案:

答案 0 :(得分:1)

我看到两个问题。首先,您似乎忘记了smarty->display()函数的失败分支中的module_action函数调用。其次,你写道:

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

这始终只会输出successfailure。您可能想要做更多类似的事情:

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; 
}