您好我使用这段代码将json文件转换为对象。 我的问题是我不能在任何其他函数中使用变量respons。有谁知道如何解决这个问题?
var response;
function AJAX_JSON_Req( url )
{
var AJAX_req = new XMLHttpRequest();
AJAX_req.open( "GET", url, true );
AJAX_req.setRequestHeader("Content-type", "application/json");
AJAX_req.onreadystatechange = function()
{
if( AJAX_req.readyState == 4 && AJAX_req.status == 200 )
{
response = JSON.parse( AJAX_req.responseText );
}
}
AJAX_req.send();
}
答案 0 :(得分:0)
response
是异步设置的。在AJAX响应到来之前,它不会被填充。在发生这种情况之前,您将无法访问它。依赖于该变量的任何代码都应位于onreadystatechange
回调中。
var response;
function AJAX_JSON_Req( url )
{
var AJAX_req = new XMLHttpRequest();
AJAX_req.open( "GET", url, true );
AJAX_req.setRequestHeader("Content-type", "application/json");
AJAX_req.onreadystatechange = function()
{
if( AJAX_req.readyState == 4 && AJAX_req.status == 200 )
{
response = JSON.parse( AJAX_req.responseText );
// Code that depends on response should be in this scope.
}
}
AJAX_req.send();
}
AJAX_JSON_Req('http://something')
response // undefined here
答案 1 :(得分:-1)
我也遇到了这个问题。然后我在dom中输入了一个输入类型隐藏字段,存储了ajax响应或结果,当需要时我从隐藏字段中提取结果数据。在这里你还需要异步false。
答案 2 :(得分:-2)
AJAX_req.open( "GET", url, true );
last参数表示异步为true,如果要在此函数中定义参数并在其他函数中使用它,则不能这样做(我的意思是这取决于响应时间)。你可以使用false作为最后一个参数可能会帮助你。 但是这次你会等待继续的回应