使用Async javascript调用接收数据

时间:2012-01-10 17:18:48

标签: javascript http javascript-events callback

我希望使用javascript从网络服务端点(例如“http://www.hello.com”)请求数据。

检索后,会有一个回调函数来处理响应(它将是一个JSON对象)

我该怎么写呢?骨架代码可以。

会是这样的:

<script>

function callback(data)
{
    // the response text would be processed here.
}
       url="http://www.endpoint.com";
       var script = document.createElement('script');
       script.src = url;
       script.onload=callback;
       document.body.appendChild(script);        
</script>

提前致谢。

2 个答案:

答案 0 :(得分:1)

您应该查看以下示例:http://api.jquery.com/jQuery.getJSON/

这将为您提供入门所需的一切以及更多内容,以下示例来自链接:

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
  {
    tags: "cat",
    tagmode: "any",
    format: "json"
  },
  function(data) {
    $.each(data.items, function(i,item){
      $("<img/>").attr("src", item.media.m).appendTo("#images");
      if ( i == 3 ) return false;
    });

此处jSON get请求在url中发送3个参数:tagstagmodeformat作为GET请求(与http://mysite.com?name=me&mood=happy相同)。

function(data)正在处理请求的结果

阅读链接,了解更多深入细节和示例。

答案 1 :(得分:1)

正如@JuicyScripter在上述评论中所指出的那样......

  

“Wikipedia使用的维基媒体API支持JSONP回调参数。”

这意味着您可以向查询添加回调...

var url = "http://en.wikipedia.org/w/api.php?action=query&prop=info|revisions&intoken=edit&titles=Main%20Page&format=json&callback=my_callback";

最后请注意我添加了&callback=my_callback。会发生什么,而不是像...那样发送JSON响应。

{
    query: {
        pages: {
            15580374: {
                ...
            }
        }
    }
}

...它现在将被包装在一个函数调用中。这将是有效的JavaScript,因此您的script请求将执行该函数,并传递数据。

my_callback({
    query: {
        pages: {
            15580374: {
                ...
            }
        }
    }
});

所以你需要的是一个回调函数,它与你在查询中给出的函数同名......

function my_callback( data ) {
    console.log( data );
}

确保此功能全局可用。

然后摆脱onload行,你的代码应该正常工作......

var url = "http://en.wikipedia.org/w/api.php?action=query&prop=info|revisions&intoken=edit&titles=Main%20Page&format=json&callback=my_callback";
var script = document.createElement('script');
script.src = url;
document.body.appendChild(script);     

当脚本到达并运行时,它将调用您的函数向其传递请求的数据。