Javascript 如何阻止函数执行直到返回json结果?
我将Springer OpenAccess API与JS一起使用,它们以多种方式提供数据,其中之一是jsonp格式。我的代码如下所示。无论我做什么,我都无法使它同步运行。回调机制是一个很好的解决方案,但我想学习如何同步运行这个函数,或者如何使这个函数能够同步运行 任何帮助都将不胜感激Javascript 如何阻止函数执行直到返回json结果?,javascript,jquery,json,jsonp,Javascript,Jquery,Json,Jsonp,我将Springer OpenAccess API与JS一起使用,它们以多种方式提供数据,其中之一是jsonp格式。我的代码如下所示。无论我做什么,我都无法使它同步运行。回调机制是一个很好的解决方案,但我想学习如何同步运行这个函数,或者如何使这个函数能够同步运行 任何帮助都将不胜感激 SpringerAPI.prototype.getArticleInfo = function(doi){ //create url of article according to given doi.
SpringerAPI.prototype.getArticleInfo = function(doi){
//create url of article according to given doi...
var url = this.endpoint.host+this.endpoint.method+''+'?q=doi:'+doi+'&api_key='+this.endpoint.apikey+"&callback=?";
//get information about article...
//perform async request to the Springer API
this.situation = true;
var article;
jQuery.ajax({
method:'POST',
url: url,
dataType: 'JSON',
cache: true,
async: false, // to set local variable
success: function(data)
{
article = FromSpringerToArticle(data,-1);
}
});
return article;
};
您不能执行同步JSONP,因为 异步的 。。。 跨域请求和数据类型:“jsonp”请求不支持同步操作
您必须执行asyc操作并使用回调。您不能执行同步JSONP,因为 异步的 。。。 跨域请求和数据类型:“jsonp”请求不支持同步操作
您必须执行asyc操作并使用回调。有没有办法模拟它?因为我真的需要这样做:/@ibrahimyilmaz:你不应该这样做,而且不,你不能模拟它。@ibrahimyilmaz为什么?回调有什么问题?如果由于程序设计的原因,您正在执行同步操作,那么您需要进行一些重新设计。是否需要等待响应到来?我这样问是因为我需要找到一种方法:/@Ibrahim:如果集成有问题,也许你应该开始研究延迟对象。它们提供了一种非常灵活的方法来处理回调。有没有方法来模拟它?因为我真的需要这样做:/@ibrahimyilmaz:你不应该这样做,而且不,你不能模拟它。@ibrahimyilmaz为什么?回调有什么问题?如果由于程序设计的原因,您正在执行同步操作,那么您需要进行一些重新设计。是否需要等待响应到来?我这样问是因为我需要找到一种方法:/@Ibrahim:如果集成有问题,也许你应该开始研究延迟对象。它们提供了一种非常灵活的处理回调的方法。学习如何正确处理回调比学习如何使Ajax调用同步更有用。JSONP不能是同步的,因为它实际上不是Ajax。它包括一个指向远程URL的脚本标记,在加载DOM后,它永远不会同步。如果我找不到任何解决方案,我想更改我们架构师的请求。@ibrahimyilmaz:这(CR)是您唯一的选择。JSON-P本质上是异步的,您无法让函数等待JSON-P结果的到来。此外,架构师应该首先正确地设计它。学习如何正确地使用回调比学习如何使Ajax调用同步更有用。JSONP不能是同步的,因为它实际上不是Ajax。它包括一个指向远程URL的脚本标记,在加载DOM后,它永远不会同步。如果我找不到任何解决方案,我想更改我们架构师的请求。@ibrahimyilmaz:这(CR)是您唯一的选择。JSON-P本质上是异步的,您无法让函数等待JSON-P结果的到来。而且,架构师首先应该正确地设计它。