我试图了解Facebook的聊天功能如何在不连续策略服务器的情况下接收消息.
Firebug向我展示了一个持续坐在那里的GET XmlHttpRequest,等待来自服务器的响应.5分钟后,这从未超时.
它们如何防止超时?
一个AJAX请求可以无限期地坐在那里等待响应?
我可以用JSONRequest做到这一点吗?我在json.org看到了这个:
JSONRequest旨在支持双工连接.这允许服务器可以异步启动传输的应用程序.这是通过使用两个同时请求来完成的:一个发送,另一个接收.通过使用timeout参数,POST请求可以保持挂起状态,直到服务器确定它有及时发送数据.
或者除了使用JSONRequest之外,还有其他方法让AJAX调用只是坐在那里等待吗?
我使用firefox 3.6.10和firebug进行调试
所以,这是我的代码:
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", url,false);
xmlhttp.setRequestHeader('Content-Type', 'text/xml');
xmlhttp.send(null);
alert(xmlhttp.responseXML);
Run Code Online (Sandbox Code Playgroud)
responseXML总是为null,我已经尝试过来自不同域的几个URL.我也异步尝试过,结果相同.该responseText的总是正确返回,与它没有任何问题.
我的目标是获取responseXML.documentElement.
谢谢你的帮助.
编辑-----------
这个javascript代码是从Greasemonkey用户脚本执行的,我使其与所请求的URL具有相同的来源.此外,我尝试从firebug控制台执行,再次确保原始政策.两者都有相同的错误.
得讨厌javascript.
我知道在使用XMLHttpRequest时,你不能拦截重定向或阻止重定向,因为浏览器会透明地跟随它,但它是否可能
A.确定重定向的请求,或
B.确定在那里它重定向到?(假设响应没有给出提示)
示例代码:
$.post("/my-url-that-redirects/", {},
function(response, statusCode, xmlHttpRequest){
//Somehow grab the location it redirected to
}
);
Run Code Online (Sandbox Code Playgroud)
在我的情况下,firebug将首先显示对URL的POST,然后对重定向的URL进行GET.可以捕获GET位置吗?
嗯,这里有关于websockets的信息.技术本身是惊人的,这一点毫无疑问.在我开始在我的应用程序中使用它们之前,我只想让社区回答以下问题:
"...为了保持存在,应用程序可以在WebSocket上发送保持活动的消息,以防止它因空闲超时而被关闭......"
"...理想情况下,WebSocket的未来版本将支持超时发现,因此它可以告诉应用程序保持活动消息的时间......"
感觉就像似曾相识.之前我们不得不一次轮询服务器%period_time%以获取所需的更新信息.对于websockets,我们必须使用keep-alive消息在%period_time%上轮询websocket服务器,以确保Internet连接仍处于活动状态/ websocket服务器仍在工作.有什么好处?
关于这些保持活跃的消息还有另外一件事.Websocket协议的优点是使用比HTTP(S)更少的流量.如果我们发送保持活跃的消息,似乎流量优势消失了.或者可能不是?
如果我使用websockets,我应该如何处理我的应用程序中的互联网丢失?我的意思是当互联网连接突然丢失时的真实情况(我的意思是没有发生"navigator.offline"事件).我应该使用某种setTimeout函数来查找保持活动消息,还是有更好的方法来处理这种情况?
REST让我们清楚地了解应用程序应该如何工作以及请求应该如何.在websocket驱动的应用程序中执行此操作的最佳方法是什么?我应该用request.action字段(例如)JSON编码的消息吗?应用程序应该如何执行PUT请求?REST模型中有URL资源来处理这个问题,所以我应该使用这些方法的组合,还是可以简化?
我一直在网上试图找到一个直接的答案.有没有人知道浏览器的ajax请求的默认超时长度?如果它改变了版本?
一个多星期拉出我的头发.
使用:
Jquery 1.9.1
使用类似于JSON示例的malsup表单插件:http://malsup.com/jquery/form/#json
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" /> with of without same error
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Run Code Online (Sandbox Code Playgroud)
Internet Explorer(8/9/10)将随机中止AJAX POST请求(非常随机)
通过Abort,我的意思是,NOTHING通过http"发送" - 它只是中止然后让眼泪流泪.
URL 我的网址是正确的
结果(已中止)字面读取(已中止)
输入空白 - 这里没什么
收到0B
拍摄202ms
启动器(待定)它从字面上读取(待定)
请求标头为空
请求体是空的
eveything是空的
但是在Timings选项卡下,我注意到它按顺序开始等待启动开始Gap DOMContentLoaded(事件)加载(事件)
应该 开始两次?或者我以某种方式提交请求两次,这是导致中止.
我会说,成功的POSTS 在时间选项卡下有两次启动.
我也是console.log错误并得到:
xmlhttprequest.ReadyState 4
xmlhttprequest.Status:12019
这当我点击提交第二次它的工作原理.顾客不会喜欢这个......
$('#formId').ajaxForm( {
dataType : 'json',
cache: false,
beforeSend: beforeGenericPostForm,
success : FormResponse,
error: genericError
});
$('#formSubmitId').click(function(e){
e.preventDefault();
//perform some …Run Code Online (Sandbox Code Playgroud) 尝试使用PhantomJS登录时,我发现了一个有趣的问题.我不知道为什么它真的发生了.
基本上你启动一个远程调试器,如下所示:
/usr/local/bin/phantomjs --web-security=no --remote-debugger-port=13379 --remote-debugger-autorun=yes /tmp/test.js
Run Code Online (Sandbox Code Playgroud)
在远程调试器中:
> location.href = "https://www.mysite.com/login"
> $('input[name="username_or_email"]').val('blah@email.com')
> $('input[name="password"]').val('wrongpassword')
> $('button[type="submit"]').submit()
Run Code Online (Sandbox Code Playgroud)
在Chrome中执行此操作会在XHR请求后给我正确的"错误密码"消息,而使用phantomjs会给我一个通用错误,因为没有使用phantomjs发送cookie(我检查了标题).
我很困惑为什么phantomjs不发送带有POST请求的cookie.有谁知道我们怎么能让phantomjs发送带有所有请求的cookie呢?设置cookie文件也没有任何区别.
我试图修改由我无法修改的函数收到的responseText.这个函数创建了一个我可以附加的XMLHttpRequest,但是我无法以允许我在原始函数接收内容之前修改内容的方式"包装"responseText.
这是完整的原始功能:
function Mj(a, b, c, d, e) {
function k() {
4 == (m && 'readyState' in m ? m.readyState : 0) && b && ff(b) (m)
}
var m = new XMLHttpRequest;
'onloadend' in m ? m.addEventListener('loadend', k, !1) : m.onreadystatechange = k;
c = ('GET').toUpperCase();
d = d || '';
m.open(c, a, !0);
m.send(d);
return m
}
function ff(a) {
return a && window ? function () {
try {
return a.apply(this, arguments)
} catch(b) {
throw …Run Code Online (Sandbox Code Playgroud) 同步XMLHttpRequest已被弃用,这意味着最终将删除对它的支持,这是我在Chrome中收到的消息:
主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用.如需更多帮助,请访问http://xhr.spec.whatwg.org/.
所以,我的问题是,如果是,如果是的话,主流浏览器(特别是Chrome)何时会放弃对同步XMLHttpRequest的支持?
这可能只是突出了我的一些误解,但我很好奇:
如果您运行的HTTP/2服务器并且希望在浏览器中向服务器发出XHR请求,那么XHR会自动利用标头中的性能优化并提供它吗?
或者它会忽略该功能并作为HTTP请求运行?如果是这样,我们可以做些什么来在我们的请求中使用新的优化吗?
xmlhttprequest ×10
ajax ×5
javascript ×5
jquery ×2
abort ×1
browser ×1
cookies ×1
deprecated ×1
html5 ×1
http2 ×1
json ×1
long-polling ×1
phantomjs ×1
synchronous ×1
websocket ×1