2016-06-25 62 views
0

我通过xmlHttpRequest加载一个页面,并且我没有收到一个变量,在页面加载完成后一些毫秒后进入存在 所以问题是xmlHttpRequest发回响应时我没有得到它的变量。 即使在onload之后,我也希望它能够回应。即使在onload后xmlhttpRequest响应等待

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); 
     }; 
    }; 

顺便说一下,我试图加载亚马逊登录页 和每次缺少的变量是隐藏输入字段metadata1, 我得到respo所有其他隐藏的输入字段除输入字段外,命名为“metadat1”的文字。

如果有人可以提供帮助,我会比其他人更快乐。 在此先感谢

回答

-1

喔最后我做到了,我 阅读din't任何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 
    }  
}       

} 

---------------------改进版本---------------------- -

而不是通过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

如果数据不存在,直到页面加载后的一段时间,大概它是由JavaScript生成的。

如果您使用XMLHttpRequest请求URL,那么您将在响应中获得该页面的源代码。被JavaScript处理后,你不会得到生成的DOM。

您需要阅读正在请求的页面上的JavaScript,计算出它是如何生成要读取的数据,然后复制它对自己的代码执行的操作。

+0

所以,是不可能得到这些数据,JavaScript有产生它。我后想想如果我可以让xmlhttp req在页面加载之后等待几毫秒,那么可能我可以在请求本身中获得它,因为如果我在我的结尾生成它,我将获得一些其他值,因为它是随机生成的,如果我在我的最后生成它,它可能被证明是错误的 – user5821368

+0

“因此,在javascript生成后无法获得该数据。” - 我告诉过你在答案的最后一段需要做什么。 – Quentin

+0

“我认为如果我可以制作xmlhttp req在页面加载后等待几毫秒“ - 你不能,因为没有页面加载。只有HTML源代码被传递给XMLHttpRequest对象。 – Quentin