谁能告诉我document.readyState和"DOMContentLoaded"的"交互"状态之间的区别?
我找不到关于"交互"状态的大量信息,以及在页面中可以使用的具体内容.
这个页面说:
交互式 - 已加载足够,用户可以与之交互
这看起来很像DOMContentLoaded事件.
我在这里写了一个快速测试页面,似乎表明交互式readystate似乎在DOMContentLoaded事件之前可用.
那么有人可以澄清或给我一些关于在交互状态下可以在页面上操作的信息,以及它是否与DOMContentLoaded相同,如果是这样,为什么它在DOMContentLoaded之前可用?
:)
干杯,Yansky.
编辑:忘记添加,您需要运行FF4b才能使用/查看新的readystate功能.
我正在努力使用Browserify和文档就绪事件.如何创建一个模块,用于导出仅在文档就绪事件触发后可用的内容?我如何依赖这样的模块?
我的第一个尝试是尝试异步设置module.exports - 开箱即用.我的下一个问题就是模块返回一个接受回调的函数,并在文件准备好时触发调用.第三次尝试回复了承诺.这似乎使依赖模块不是非常模块化的,因为现在依赖的模块及其依赖性(以及它们,乌龟一直向下)也必须利用这种模式.
使用Browserify和文档就绪事件有什么好的模式?
我试图在脚本完全加载后做一些事情.(IE8)
我用于测试的脚本:http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js
和无效的脚本:http://ajax.googleapis.com/ajax/libs/的jquery/1.5.1/jquery.minaaaaaaaa.js
代码...
var script = create the element and append to head...
// this works fine with FF/Chrome/...
script.onload = function() {alert('script loading complete');}
script.onerror = function() {alert('error loading script');}
// and for IE
script.onreadystatechange = function() {
// this will alert 1.loading 2.loaded
alert(this.readyState);
// this never works
if(this.readyState == 'complete') {alert('script loading complete');}
// this works with either a valid or INVALID url
else if(this.readyState == 'loaded') {alert('script loaded');}
}; …
Run Code Online (Sandbox Code Playgroud) 我的反应应用程序中有一个脚本,我想在页面完全加载后运行。
我试过在 componentDidMount / componentDidUpdate 中监听这样的窗口加载:
document.onreadystatechange = function () {
if (document.readyState === 'complete') {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
这在应用程序首次加载时有效一次,但在后续加载时无效。
我也试过这个:
window.onload = function () { alert("It's loaded!") }
Run Code Online (Sandbox Code Playgroud)
但也是同样的结果。
我尝试在历史记录的 before 钩子中添加此警报:
browserHistory.listen((location) => {
window.onload = function () { alert("It's loaded!") }
}
Run Code Online (Sandbox Code Playgroud)
这仅在我导航后才有效。browserHistory 是否有一个 after 钩子会在页面加载后运行?
底线,我想知道页面何时在路由更改和刷新时加载到反应应用程序中,以便我可以执行脚本。
谢谢
如何在jQuery $.ajax
方法上调用Ajax就绪状态?
尝试处理window.onreadystatechange
,我注意到此事件在页面加载期间触发了两次。但我无法弄清楚每次事件后究竟发生了什么变化。如果不是 for window
,而是 for document
,那么就有document.readyState
包含当前状态的属性。但在 的情况下window
,没有任何“window.readyState”
或类似的属性。那么触发readystatechange
事件的真正含义是window
什么,第一次和第二次触发之间的区别是什么?
这是我的代码,它提供了两个看似相同的控制台输出:
'use strict';
window.addEventListener('readystatechange', function(e) {
console.log(window, e);
});
Run Code Online (Sandbox Code Playgroud)
javascript window readystate onreadystatechange microsoft-edge
如何调用我的函数:myFunc1
在jquery
浏览器完全发送 ajax 请求之后?
我想在发送jquery ajax 后运行回调函数。我不想这样做,complete
或者success
因为我不想等待请求完成。我想在从浏览器发送 ajax 请求后立即触发它。
这是我需要的用例:
我想在发出 ajax 请求后运行一个函数。我的原始代码是这样的:
$.ajax({url: 'x.html'});
myFunc1();
Run Code Online (Sandbox Code Playgroud)
在 myFunc1() 更改浏览器位置的情况下,浏览器将取消挂起的 ajax 请求。
我目前的解决方案是这样做:
$.ajax({url: 'x.html', complete: myFunc1});
Run Code Online (Sandbox Code Playgroud)
这确保myFunc1
在 ajax 完成之前不会调用它。尽管此解决方案有效,但效率低下,因为myFunc1
在请求完成之前不会运行。由于我不在乎ajax请求返回什么,无论失败还是成功,我不需要等待它完成运行该myFunc1
函数。
这段代码工作正常:
function callFromFlex(url, method, payload) {
console.log("call from Flex: " + method + " " + url + " " + payload);
var xhttp = new XMLHttpRequest();
xhttp.open(method, url, true);
xhttp.setRequestHeader("Content-Type", "application/json");
xhttp.onreadystatechange = function() {
console.log(xhttp.readyState);
if (xhttp.readyState == 4) {
console.log("trying to call flash...");
// Callback to Flash here
...
}
};
xhttp.send(payload);
}
Run Code Online (Sandbox Code Playgroud)
但这不会 - onreadystatechange 永远不会被调用:
function callFromFlex(url, method, payload) {
console.log("call from Flex: " + method + " " + url + " " + …
Run Code Online (Sandbox Code Playgroud) 这件事几乎有效:
function myClass(url) {
this.source = url;
this.rq = null;
this.someOtherProperty = "hello";
// open connection to the ajax server
this.start = function() {
if (window.XMLHttpRequest) {
this.rq = new XMLHttpRequest();
if (this.rq.overrideMimeType)
this.rq.overrideMimeType("text/xml");
} else
this.rq = new ActiveXObject("Microsoft.XMLHTTP");
try {
this.rq.onreadystatechange = connectionEvent;
this.rq.open("GET", this.source, true);
this.rq.send(null);
this.state = 1;
} catch (err) {
// some error handler here
}
}
function connectionEvent() {
alert("i'm here");
alert("this doesnt work: " + this.someOtherProperty);
}
Run Code Online (Sandbox Code Playgroud)
} // 我的课
所以它只不过是将XMLHttpRequest对象作为我的类的成员而不是全局定义,并以传统方式调用它.但是,在我的connectionEvent回调函数中,"this"的含义丢失了,即使函数本身是在myClass中的作用域.我还确保我从myClass实例化的对象保持足够长的时间(在脚本中声明为全局).
在我看到的所有使用javascript类的例子中,"this"仍在内部函数中可用.对我来说,它不是,即使我把我的函数带到外面并使它成为myClass.prototype.connectionEvent.我究竟做错了什么?谢谢.
javascript properties class xmlhttprequest onreadystatechange
如果页面中有两个javaScript函数,则在文档加载完成时需要调用这些函数.有可能任何函数可以先执行,或者它将是第一个始终执行的函数吗?
因此,如果您使用jQuery,如果您有以下代码:
$(document).ready(function(){ function1(); });
$(document).ready(function(){ function2(); });
Run Code Online (Sandbox Code Playgroud)
可以function2
先执行还是function1
先执行?
我有一个'偶然'问题:
当用Ajax发送请求时... open必须先发送,肯定......但是onreadystatechange分配怎么样?
在打开 Request对象之前,发送之后还是之间进行逻辑设置?
让我回想起'
// Using POST
XMLHttp.open('POST', url, true);
XMLHttp.onreadystatechange = RequestState;
XMLHttp.send(parameter);
Run Code Online (Sandbox Code Playgroud) 我正在尝试在jQuery中实现XHR流Comet技术,但是在检测onreadystatechange
事件时遇到了一些麻烦.我正在使用Firefox 4.0.1.
我正在使用预过滤器(自jQuery 1.5起可用)来修改本机XHR对象,特别是为事件添加事件处理程序onreadystatechange
.我在http://jsfiddle.net/Rdx6f/上有一个粗略的实现.该事件被触发时,该代码会将文档附加到XHR对象readyState
和responseText
属性onreadystatechange
.但奇怪的是,它似乎只onreadystatechange
在readyState
1 时检测到事件.
换句话说,onreadystatechange
当XMLHttpRequest对象处于"打开"状态(readyState 1)时,jQuery似乎检测到事件,但是当XHR对象处于"收到的头"状态(readyState 2),"loading"(readyState 3)时,jQuery似乎没有检测到事件. ),也没有"完成"(readyState 4).
奇怪的是,如果我alert()
在事件处理程序中,那么我确实看到onreadystatechange
readyState为1,2,3和4时的处理.请参阅http://jsfiddle.net/Rdx6f/1/.与http://jsfiddle.net/Rdx6f/相同的代码,只是alert()
而不是附加到文档.
我还可以在本机JavaScript中检测1,2,3或4 onreadystatechange
时的事件readyState
- 请参阅http://jsfiddle.net/d7vaH/.(该代码几乎是从Dylan Schiemann在"Even Faster Websites"一书的第115页上实现的XHR流程中逐字记录的.)
我只是在这里做错了,比如使用jQuery的Ajax前置错误或者出现JavaScript错误?这可能是jQuery中的一个错误吗?
我正在尝试从 onreadystatechange AJAX 调用返回一个值...我找到了此页面:stackoverflow 链接。我虽然可以正常工作,但意识到添加或删除 fn 函数没有什么区别。以下代码有效:
username_is_available();
function username_is_available() {
var username = document.getElementById('username').value;
get_data('username', username, function(returned_value) {
if (returned_value == 'true') {
document.getElementById('username_err').innerHTML = 'Taken';
} else {
document.getElementById('username_err').innerHTML = 'Available';
};
});
}
function get_data(data_type, data, fn) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
fn(xmlhttp.responseText);
}
};
xmlhttp.open("GET", "availability.php?" + data_type + "=" + data, true);
xmlhttp.send();
}
Run Code Online (Sandbox Code Playgroud)
一切正常,但这不是我的目标,我想要一个函数 username_is_available() ,如果用户名确实可用,它返回 true 。相反,这里发生了一个操作(innerHTML …
javascript ×10
jquery ×4
readystate ×4
ajax ×3
browserify ×1
call ×1
callback ×1
class ×1
comet ×1
dom ×1
flash ×1
onload ×1
properties ×1
reactjs ×1
send ×1
window ×1