AJAX请求的Javascript解析
背景:在下面的客户端脚本中,AJAX请求被发送到服务器,从服务器上的JSON文件获取数据。首选方法是发送一个请求以获取页面上所需的所有数据,而不是在整个页面中发送多个单独的数据请求AJAX请求的Javascript解析,javascript,json,ajax,Javascript,Json,Ajax,背景:在下面的客户端脚本中,AJAX请求被发送到服务器,从服务器上的JSON文件获取数据。首选方法是发送一个请求以获取页面上所需的所有数据,而不是在整个页面中发送多个单独的数据请求 问题:因为AJAX请求是异步运行的,所以页面加载时会运行页面底部的alert#2,而页面加载后会运行请求中的alert#1。因此,警报#2中game.game_nb的值为“未定义”,而警报#1中game.game_nb的值包含有效数据。请注意,游戏对象具有功能范围 问题:如何配置AJAX请求,以便在加载页面时警报#2
{ // loadGame
var request = new XMLHttpRequest();
path = setHTTPRequestPath( "loadGame" );
request.open("POST", path, true);
request.setRequestHeader("header_nb", "108");
request.setRequestHeader("header_nm", "loadGame");
request.setRequestHeader("game_nb", gameNumber);
request.setRequestHeader( "Content-Type", "application/json; charset=UTF-8" );
request.send(null);
request.onreadystatechange = function()
{
if (( request.readyState === 4 ) && ( request.status === 200 ))
{
game = JSON.parse(request.responseText, "utf8");
alert("alert #1: " + game.game_nb );
}
}
} // eofcb
alert("alert #2: " + game.game_nb );
正如您自己所说,JSON文件驻留在服务器上,game.game\u nb作为请求的结果填充。因此,在警报#2时不会得到结果,因为此时ajax请求仍在处理中 ajax调用完成后,将调用,onreadystatechange的动态函数,为警报#1提供正确的结果 请记住,代码段中的顺序是:
- 发送ajax请求
- 执行警报#2(无值)
- 收到回复
- 执行警报#1(带值)
game.game\u nb
是你只能从服务器上获得的东西,那么在加载页面时它怎么会有值呢?这让我们两个人都感到困惑。英雄联盟游戏对象来源于服务器上的JSON文件。Game_nb是对象中的几个属性之一。当请求完成时,如所附代码中所述,将根据请求填充game.game_nb。这回答了你的问题吗?我应该指出,game.game#nb填充在alert#1中,而不是填充在alert#2中,这是我问题的基础……你能用简单的英语告诉我你想用alert#2做什么吗?您是否只想弹出“正在加载…”之类的内容,然后在加载时弹出“1”警报?1。不,这不是我问题的目的。谢谢你的澄清。对于我们这些新手来说,异步编码确实需要一点时间来适应。干杯,伙计……是的,一开始可能看起来有点复杂:)