jQuery.ajax返回空数组

时间:2016-09-09 22:37:42

标签: javascript jquery

我目前正在学习使用API​​。我从我的Github仓库中检索数据。我试图让脚本将JSON信息加载到githubData变量中。但是当我将githubData变量记录到控制台时,它返回一个空数组。 然而,如果我在加载页面后创建一个具有完全相同功能的新变量,则脚本的工作方式完全正常。 页面加载时,它没有加载实际数据。它加载一个空数组。我意识到这个函数是异步的,所以当我加载页面时,如何让数组不为空? 这是我的代码:

public class DataLakeEventListenerRouteIT extends CamelTestSupport {
    @Autowired
    private MyRouteBuilder myRouteBuilder;
    private MockEndpoint myEndpointMock;

    @Override
    public boolean isUseAdviceWith() {
        return true;
    }

    @Override
    protected JndiRegistry createRegistry() throws Exception {
        JndiRegistry registry = super.createRegistry();
        //do some required bindings here
        return registry;
    }

    @Before
    public void startup() throws Exception {    
        AdviceWithRouteBuilder mock = new AdviceWithRouteBuilder() {
            public void configure() throws Exception {
                mockEndpointsAndSkip(myRouteBuilder.MY_ROUTE_URI);
            }
        };

        context.addRoutes(myRouteBuilder);
        context.getRouteDefinition(myRouteBuilder.MY_ROUTE_ID)
                .adviceWith(context, mock);

        myEndpointMock = getMockEndpoint(
                "mock:" + myRouteBuilder.MY_ROUTE_URI);
    }

    @Test
    public void timerRouteShouldSendMessage() throws Exception {
        // Arrange
        context.start();

        myEndpointMock.expectedMessageCount(1);
        myEndpointMock.assertIsSatisfied();

        context.stop();
    }
}

1 个答案:

答案 0 :(得分:1)

问题在于它的异步调用意味着一旦它触发了请求,它就会转到下一段代码。一旦它到达githubData项仍然是一个空对象,因为还没有收到api响应。 我会在var items = {}下面实例化githubData变量 像这样

var items = {} var githubData; 然后在成功:你执行$ .each之后的功能,你可以把

githubData = $.map(items,function(k,v) { return ("<p>" + k + ": " + v + "</p>"); });

这可以确保api调用已经完成,只要响应带回来,项目就应该有内容