如何强制$ .getJSON在Javascript中的$ http之前运行?

时间:2015-07-23 08:23:36

标签: javascript json http getjson

我的网页控制器中有以下Javascript代码。

 $.getJSON('resources/properties/properties.json', function(data) {
    $scope.properties = data; 
    });

$http({
    method: 'GET',
    url: $scope.properties.Properties.dataLocation
        }).
        success(function (data) {
        $scope.all_types_and_configs = data;
        $scope.exec = [];    
        }).
        error(function (data) {
        $scope.error = data.message;
        $scope.data = '';
        return;
        });
});

要获取的json文件的结构不是问题。

应该首先运行$ .getJSON命令,然后运行$ http-request,因为$ http请求从$ .getJSON部分中定义的变量获取其url在顶部但是当我在它下面做一个console.log(属性)时,它会吐出" undefined"。

为什么代码没有按照写入的顺序执行?

4 个答案:

答案 0 :(得分:1)

代码正在执行,以便写入,只有在相应的请求完成时才执行回调函数。所以你应该把第二个调用放在第一个回调中:

$.getJSON('resources/properties/properties.json', function(data) {
    $scope.properties = data;
    $http({method: 'GET', url: $scope.properties.Properties.dataLocation}).
        success(function (data) {
            $scope.all_types_and_configs = data;
            $scope.exec = [];    
        }).
        error(function (data) {
           $scope.error = data.message;
           $scope.data = '';
           return;
        });
    });
});

答案 1 :(得分:0)

它是异步执行的,因此两个调用都将独立完成。 $ .getJSON有第三个参数 - 成功回调这是同步它们的方法。 http://api.jquery.com/jquery.getjson/

不确定为什么要混用jQuery AJAX和Angular $ http?

答案 2 :(得分:0)

您可以使用JQuery.done,它会在您的请求完成后执行您的代码。

示例:

    public static void display(final String f) throws Exception {
        JFrame jf = new JFrame();
        JPanel jp = new JPanel() {
            private BufferedImage bi = ImageIO.read(new File(f));
            public void paint(Graphics g) {
                Graphics2D g2 = (Graphics2D)g;
                RenderingHints rh = new RenderingHints(
                    RenderingHints.KEY_INTERPOLATION,
                    RenderingHints.VALUE_INTERPOLATION_BICUBIC);
                g2.setRenderingHints(rh);

                int w = getWidth();
                int h = getHeight();
                g.drawImage(bi, 0, 0, w, h, null);
            }
        };
        jf.add(jp);
        jf.setBounds(0, 0, 400, 200);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

答案 3 :(得分:0)

与收到JSON后已经运行$scope.properties = data;行的方式相同。你把它放在你传递给getJSON的回调函数中。

  

为什么代码没有按照写入的顺序执行?

是。

getJSON(url, foo)表示“向网址发出HTTP请求,并设置一个事件处理程序,以便在收到响应时调用foo”。

在执行任何其他之前,您似乎期望等待以获得响应。这会锁定用户界面并变得非常糟糕。