将JSON响应放入隐藏字段并将其检索到函数中

时间:2013-02-02 20:57:40

标签: ajax json spring jquery

我正在使用JSON使用以下函数检索数据库中表所包含的行数。

function rowCount()
{
    $.ajax({
        headers: { 
                'Accept': 'application/json',
                'Content-Type': 'application/json' 
            },
        datatype:"json",
        type: "GET",                    
        url: "/wagafashion/ajax/CmsRowCount.htm",
        success: function(response)
        {
            $("#rows").val(response);
        },
        error: function(e)
        {
            alert('Error: ' + e);
        }
    });
}            

在成功处理程序中,响应按预期到达。服务器端没有问题。

响应只是用long类型的Java映射,它表示数据库表中的行数。

我将此回复放在隐藏字段中,id rows在成功处理程序中使用$("#rows").val(response);

使用以下jQuery函数提交表单时,将调用上述函数。

$(function() {
    $('#dataForm').submit(function() {

        rowCount();  //Invokes the above function that makes a JSON request.
        var rows=$("#rows").val();
        alert("rows = "+rows);

        return false;
    });
});

警告框会尝试警告隐藏字段(如上所述的JSON响应)所包含的值,但第一次它为空。只有当我再次按下提交按钮(没有页面刷新)时,它才会提醒实际值。


还尝试用以下内容替换上述功能。

$(function() {
    $('#dataForm').submit(function() {

        rowCount();  //Invokes the first function that makes a JSON request.     

        var form = $(this),
        url = form.attr('action'),
        rows = form.find('input[name="rows"]').val();

        alert("rows = "+rows);

        return false;
    });
});

但它也没有用。为什么会这样?在前面的jQuery函数中检索隐藏字段的正确值的方法是什么?

1 个答案:

答案 0 :(得分:2)

  

警告框会尝试警告隐藏字段所包含的值(如上所述,这是JSON响应),但第一次它是空的

Ajax调用 asynchonrous 。当您致电rowCount时,开始电话,然后rowCount返回并继续您的代码。该调用直到完成直到稍后(这就是ajax接受回调的原因。)

如果您从回调中触发了正在执行的操作的下一步,则您将拥有该值。您通常通过让rowCount接受自己的回调来完成此操作,如下所示:

function rowCount(callback)          // <==== Accept the callback
{
    $.ajax({
        headers: { 
                'Accept': 'application/json',
                'Content-Type': 'application/json' 
            },
        datatype:"json",
        type: "GET",                    
        url: "/wagafashion/ajax/CmsRowCount.htm",
        success: function(response)
        {
            $("#rows").val(response);
            callback();              // <==== Call the callback
        },
        error: function(e)
        {
            alert('Error: ' + e);
            callback();              // <==== Probably want to give it a value telling it things failed
        }
    });
}

然后使用它:

$(function() {
    $('#dataForm').submit(function() {
        var form = $(this); // <== Grab this outside the callback

        rowCount(function() {

            var url = form.attr('action'),
                rows = form.find('input[name="rows"]').val();

            alert("rows = "+rows);
        });

        return false;
    });
});

如果您想决定是否允许在回调的基础上提交表单,则必须始终取消提交,然后如果您想允许,则必须触发从回调中以编程方式提交表单。 / p>