【问题标题】:get value from $.postJSON or wait for it to finish从 $.postJSON 获取价值或等待它完成
【发布时间】:2012-08-29 18:09:43
【问题描述】:

我正在向服务器发送一个简单的 JSON 帖子,并且我只在布尔值上检索。问题是这个 json 调用在另一个函数内部,它也需要返回该布尔值。

我这里有两个解决方案

  1. 不知何故从 JSON 返回函数返回数据,然后从包装函数再次返回(我这里的代码不起作用,我不知道如何从 $. postJSON:

        function testZipCode(zipcode, state) {
        var s;
        $.postJSON("/Cart/ZipTest",
            {
                state: state,
                zipCode: zipcode
            }, function (data) {
                if (!data.ok) {
                    s = false;
                }
                s = true;
            });
            return s;
    }
    

    }

  2. 等待 POST 完成,然后像这样返回结果:(我在这里遇到的错误是我在 POST 完成之前调用了 return,因此 responseText 为空。有人可以帮忙吗?

     var result = $.postJSON("/Cart/ZipTest",
     {
                state: state,
                zipCode: zipcode
            }, function (data) {
                if (!data.ok) {
                    //do something
                }
            });
            return $.parseJSON(result.responseText).ok;
    

【问题讨论】:

  • 您是否创建了一个名为jQuery.postJSON 的方法? jQuery 没有内置的。你的返回 $.parseJSON(...) 将在 responsetext 有值之前发生,异步代码不应该这样写。
  • 这正是问题所在。是的,我确实有 .postJSON。谢谢

标签: jquery json post


【解决方案1】:

将ajax调用作为延迟对象返回,并在回调函数中做一些事情:

function someOtherFunction() {
    testZipCode('90102', 'FL').done(function(data) {
        if (!data.ok) something = false;
    });

}

function testZipCode(zipcode, state) {
    return $.getJSON("/Cart/ZipTest", {state: state, zipCode: zipcode} );
}​

【讨论】:

  • 从 testZipCode 退出后,我可以在 someOtherFunction() 中使用一些东西吗?
  • 仅在回调内部或通过使用返回对象的变量在代码中的其他位置再次调用延迟对象上的done()always() 等,因为这就是异步 ajax 调用的方式工作。
  • 如果 ZipTest.ok == false 的结果,我的目标是退出 someOtherfunction();如果我不能在 done() 之外使用something,那么我将无法做到这一点?
  • 好吧,当然可以。但是,如果您正在做一些依赖于从 ajax 调用接收到的数据的事情,则必须等到该数据返回,没有其他选择,并且由于调用是异步的,因此您必须使用回调函数当数据实际可用时执行代码。换句话说,您必须检查数据并从函数返回或在回调函数中执行您打算执行的任何操作,否则来自 ajax 调用的数据尚不可用。
  • 我只是为此使用了同步 ajax 调用。感谢您的帮助!
【解决方案2】:

做这样的事情..

 {
            state: state,
            zipCode: zipcode
        }, function (data, count) {
            if (!data.ok) {
               getTheData(data); //do something
            }
        });


           return $.parseJSON(result.responseText).ok;

         function getTheData(data)
{
//do things with data here
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2020-04-01
    • 2013-04-09
    • 1970-01-01
    • 2021-03-23
    相关资源
    最近更新 更多