如何访问ajax jsonp结果数据以返回true或false?

时间:2019-03-07 11:14:26

标签: javascript jquery json ajax

我有一个需要return true;return false;的函数,其中包含一个ajax调用,该调用是根据响应确定条件结果的方法。

我的问题是范围界定,我不确定如何摆脱这一困境。如果我设置为回调,则return语句位于回调函数本身中,并且不在主包装函数中执行。

应如何设置才能正确执行?我需要完全重组吗?

function() {

     var response;

     $.ajax({
         dataType: 'jsonp',
         url: 'https://apilayer.net/api/check?access_key=',
         async: false,
         success: function(json) {
             response = json.score;         
         }
     });


     if (response == 1) {
         return false;
     }

 };

3 个答案:

答案 0 :(得分:1)

dataType: 'jsonp',
async: false,

无法同步发出JSONP请求 ,因此async: false被忽略。

如果您没有发出JSONP请求,那么使用async: false仍然是一个坏主意(它所依赖的基础功能已被淘汰是有充分理由的)。

这意味着您无法做自己想做的事。

How do I return the response from an asynchronous call?的答案描述了解决此问题的策略。

答案 1 :(得分:0)

首先,不再支持'async = false',因此呼叫本质上将是异步的。 现在,您有两个选择:

  1. 初始化条件变量,即使用某些值的响应。所以即使 没有收到ajax响应,如果出现以下情况,您将不会遇到任何错误 条件。
  2. 将条件语句放入回调中。

如果您的条件基于ajax响应,那么理想的方法是将其放入回调函数中。 希望对您有帮助!

答案 2 :(得分:-2)

如果您使用async false,则请求将变得同步,并且直到请求完成后,代码才会执行​​。这会降低浏览器的速度。

 var response = $.ajax({
         dataType: 'jsonp',
         url: 'https://apilayer.net/api/check?access_key=',
         async: false,
         success: function(json) {
             response = json.score;         
         }
     });