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

Ajax 将JSON响应放入隐藏字段并将其检索到函数中,ajax,json,spring,jquery,Ajax,Json,Spring,Jquery,我正在使用JSON通过以下函数检索数据库中表包含的行数 function rowCount() { $.ajax({ headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, datatype:"json", type: "GET",

我正在使用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,它表示数据库表中的行数

我使用
$(“#rows”).val(response)将此响应放在一个隐藏字段中,该字段的
id
rows

当使用以下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响应)包含的值发出警报,但它第一次是空的。仅当我再次按下submit按钮(无页面刷新)时,它才会提醒实际值


还尝试用以下函数替换前面的函数

$(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函数中

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

Ajax调用是异步的。调用
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
        }
    });
}
函数rowCount(回调)//Ajax是异步的。您正在尝试在收到响应之前访问数据。请看一看。
$(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;
    });
});