【问题标题】:ajax call back JSON object returns undefinedajax 回调 JSON 对象返回未定义
【发布时间】:2013-02-18 22:46:27
【问题描述】:

我查看了很多关于这个主题的帖子,并尝试了几种解决方案,但我似乎无法正确解决。

最后一次尝试

function checkzip(x){  

       $.ajax({
       type:'POST',
       url:'zipcheck.php',
       data:{zip: x},
       async: false
    }).done(function(r){
        rates(r);
    });
}

function rates(r){
    alert (r);
    if (r !== 'none'){
    m = JSON.parse(r);
    return m;
    }
    else {
        return false;
    }
}

返回的json是{"rateA":"125","rateB":"80","rateC":"150","rateD":"130"}

所以我希望能够:

new_rate = checkzip('77090');

alert (new_rate.rateA);

但是我的返回值是不确定的

我尝试在成功中传递函数:AND .done(),我尝试直接从两者返回它,而不是在设置 async:false 时也传递给单独的函数。 我尝试将 ajax 调用与 zipcheck() 函数内的函数一起放置,然后也从那里调用它。 我错过了从 ajax 创建对象或使用异步函数的内容。

【问题讨论】:

  • 异步函数并不是这样工作的。您无需调用它们并等待响应,而是调用它们并绑定一个在它们完成时运行的回调。
  • 好的,你能给我一个简单的例子吗?

标签: javascript jquery ajax object asynchronous


【解决方案1】:

您认为问题在于异步性是正确的。您基本上需要对 rates() 函数内的响应进行任何处理,而不是让 checkzip() 返回一个值。如果您将 alert() 调用放在 rates() 方法中,您应该会看到一些输出。

function checkzip(x) {  
       $.ajax({
       type:'POST',
       url:'zipcheck.php',
       data:{zip: x},
       async: false
    }).done(function (r) {
        rates(r);
    });
}

function rates(r) {
    alert(r);
    if (r !== 'none') {
        var m = JSON.parse(r);
        // Do something with m now.
        alert(m.rateA);
    }
}

【讨论】:

  • 好吧,我已经做到了……但我需要一个可以传递给其他函数的对象。所以在一个函数中,我使用 ajax 设置 new_rate 对象,然后随意将其传递给另一个函数。
  • 恐怕这根本不是处理异步调用的方式。如果要进行异步调用,则需要使用上述回调函数:需要一点时间来适应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多