我的网页控制器中有以下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"。
为什么代码没有按照写入的顺序执行?
答案 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
”。
在执行任何其他之前,您似乎期望等待以获得响应。这会锁定用户界面并变得非常糟糕。