AJAX JSONP调用时执行时间重叠

Posted

技术标签:

【中文标题】AJAX JSONP调用时执行时间重叠【英文标题】:Execution Time overlapse while AJAX JSONP Call 【发布时间】:2014-11-07 15:45:13 【问题描述】:

我有一个 jsonp ajax 调用,它被执行并将数据返回到我的主函数。

这是通过调用that.mainfunction(newData);在成功函数中完成的

这意味着主函数被第二次调用,我认为我在时间/执行问题中运行。

在第一次迭代中运行时,newData 为空,并返回空给主函数。这个框架的主要功能是我必须使用的。所以另一个控件试图调用空的getter。因此控件为空。

然后第二次迭代开始。数据在这里,脚本调用that.mainfunction(newData); 并将数据返回给主函数。

但是

第二次迭代运行的时间太晚了,无法将数据传输到控件。因为它已经尝试获取数据。

如何避免这个时间/执行问题?是否有一些事件总线可以在使用 jquery 时发布/订阅?

这是一些代码:

sap.designstudio.sdk.Component.subclass("component", function() 
var that = this;

this.processDataFromServer = function()

    function getData(callback)
        $.ajax(
                url: path,
                dataType: 'jsonp',  
                contentType: "application/json",
                success: function(data)
                    callback(data);
                
            );
    ;
    getData(processData);    
    function processData(data)
        this.processDataFromServer(data);
    ;

this.mainFunction = function(newValue)
  if(typeOf(newValue) == "undefined"
    this.processDataFromServer();
   else 
    return newValue;
  

【问题讨论】:

【参考方案1】:

我看到你正在使用$.ajax,所以 我相信解决这个挑战的最简洁的方法是使用 jQuery promise/deferred - 这将确保在适当的时间执行。我自己利用 promise 来确保干净的 ajax 请求/响应。

.promise() 方法返回一个动态生成的 Promise,它是 一旦某种类型的所有动作都绑定到集合,就解决了, 排队与否,已经结束。

jQuery Doc

要全面了解承诺/延迟模式:http://www.danieldemmel.me/blog/2013/03/22/an-introduction-to-jquery-deferred-slash-promise/

【讨论】:

感谢您的回答。我只是尝试使用延迟模式。但我仍然没有得到任何数据。如果我首先调试所有步骤,则调用主函数,但延迟函数的结果为空。然后调用 $.done 中的调试器行。响应已经存在,但仍为时已晚,无法将其返回给主要功能。也许我可以用 onInit、Before 或 AfterUpdate 做点什么? 看来函数不应该是空的,除非有什么问题。我建议做一个超出项目范围的简单练习,它会执行一个简单的承诺延迟模式。这至少可以帮助您在不考虑项目代码的情况下准确地磨练如何实现这一点。它应该有助于排除故障。

以上是关于AJAX JSONP调用时执行时间重叠的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 中止 JSONP ajax 请求

使用带有 JSONP 的 AJAX 未捕获的 SyntaxError 和 CORS 错误

带有 jsonp 内容类型的 jQuery.ajax 请求后的解析器错误

使用 JQuery Ajax 和 JSONP 调用 OData 服务

当dataType为JSONP时没有调用ajax成功回调函数。在跨域访问中

如何解决ajax跨域请求?