即使在onload之后,xmlhttpRequest响应也会等待

时间:2016-06-25 13:07:43

标签: javascript xmlhttprequest

我正在通过xmlHttpRequest加载一个页面,并且我没有得到一个在页面加载完成几毫秒后存在的变量 所以问题是当xmlHttpRequest发回响应时我没有得到它的变量。 我希望它在onload之后回复。

 var xhr = new XMLHttpRequest();
            xhr.open("GET", event.url, true);
            xhr.onload = function() { 
                     callback(xhr.responseText); 
                };              
            xhr.onerror = function() { callback(); };

            xhr.followRedirects = true;
            xhr.send();

我尝试了setTimeOut但没有用,因为可能在那时调用已经完成

    xhr.onload = function() { 
            console.log('wait for response');
            setTimeout(function(){
                 callback(xhr.responseText); 
            },2000);
            }; 

我尝试过readyStateChange,但没有成功

    xhr.onreadystatechange = function () {
        if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
            console.log(xhr.responseText);
            callback(xhr.responseText);
        };
    };   
顺便说一句,我正在尝试加载amazon signIn页面 并且每次丢失的变量都是隐藏的输入字段metadata1, 我在响应文本中获得所有其他隐藏的输入字段,输入字段除外,名为“metadat1”

如果有人能提供帮助,我会非常开心。 提前致谢

2 个答案:

答案 0 :(得分:0)

哦,最后我做到了, 我不读任何javascript,而是我只提取了我在xhr调用中收到的脚本并在一个隐藏的div中执行它,就在这里,我得到了该变量的值

abc(xhr.responseText);

function abc(xhrRes){
 var dynamicElement = document.createElement('div');
 dynamicElement.setAttribute("id", "xhrdiv");
 dynamicElement.setAttribute("style", "display: none;");                                
 dynamicElement.innerHTML = xhrRes;

 document.body.appendChild(dynamicElement);             

 var scr = document.getElementById('xhrdiv').getElementsByTagName("script");

 //5 scripts needed to generate the variable

 for(i=0;i<5;i++){
    eval(scr[i].innerHTML);

    if( i+1 == 5){
           var response = document.getElementById('xhrdiv').innerHTML;
           return response;   //and in this response variable I have every thing I needed from that page which I called through xmlhttp Req 
     }      
 }                          

}

---------------------改进版本----------------------- < / p>

而不是通过eval执行脚本, 将脚本内容保存在文件中并将其包含在内,因为我们通常会包含更好用的脚本。

xhrRes = xhr.responseText;

var dynamicElement = document.createElement('div');
dynamicElement.setAttribute("id", "xhrDiv");
dynamicElement.setAttribute("style", "display: none;");                                                         
dynamicElement.innerHTML = xhrRes;

document.body.appendChild(dynamicElement);              

var xhrDiv  = document.getElementById('xhrDiv');    
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = JSfile;
xhrDiv.appendChild(newScript);

(它显示编辑完成了我的匿名用户,:(因为我在编辑时忘了登录)

答案 1 :(得分:-1)

如果数据在页面加载后的某个时间内不存在,那么可能是由JavaScript生成的。

如果您使用XMLHttpRequest请求URL,那么您将在响应中获得该页面的源代码。在JavaScript操作后,您将无法获得生成的DOM。

您需要阅读您请求的页面上的JavaScript,了解它是如何生成您想要读取的数据,然后使用您自己的代码复制它的作用。