大家好我有这个代码:
function test()
{
req = new XMLHttpRequest();
req.upload.addEventListener("progress", updateProgress, false);
req.addEventListener("readystatechange", updateProgress, false);
req.addEventListener("error", uploadFailed, false);
req.addEventListener("abort", uploadCanceled, false);
var data = generateRandomData(currentPayloadId);
totalSize = data.length;
req.open("POST", "www.mydomain.com/upload.aspx");
start = (new Date()).getTime();
req.send(data);
}
function updateProgress(evt)
{
if (evt.lengthComputable) {
total = totalSize = evt.total;
loaded = evt.loaded;
}
else {
total = loaded = totalSize;
}
}
Run Code Online (Sandbox Code Playgroud)
此外,我的服务器响应了对于upload.aspx的初始OPTIONS请求200和Access-Control-Allow-Origin:*然后第二个请求POST发生
一切似乎都已到位,它在FireFox上运行良好,但在G Chrome上,updateProgress处理程序不会被调用但只调用一次,然后lengthComputable为false.
我需要Access-Control-Allow-Origin:*因为这是一个跨域调用,脚本父级是不同服务器上的资源,然后是upload.aspx域
任何人都可以给我一些线索,提示,请帮忙吗?这是G Chrome的一个已知问题吗?
谢谢!OVA
javascript security google-chrome xmlhttprequest updateprogress
我读了一些像这样的 AJAX-Form教程.标记表单用于HTML代码.但是,我认为没有必要.既然我们是通过发送HTTP请求的XmlHttpRequest,发送的数据可以是任何东西,没有必要投入的形式.
那么,有没有理由在HTML中为AJAX应用程序提供表单标记?
首先,我知道这个问题:
特别是最好的答案,http://emilsblog.lerch.org/2009/07/javascript-hacks-using-xhr-to-load.html.
因此,使用Firefox(以及以后版本的Chrome实际上似乎也可以使用的操作系统)从Javascript访问二进制数据;不了解Opera.到现在为止还挺好.但我仍然希望找到一种方法来使用现代IE(理想情况下是IE 6,但至少是IE 7+)访问二进制数据,而不使用VB.有人提到XHR.messageBody不起作用(如果它包含零字节),但我想知道这是否可以用更新版本解决; 或者是否有可能允许简单二进制数据访问的备用设置.
我的具体用例是访问使用二进制数据传输格式(包括UTF-8编码中不合法的字节组合)编码的Web服务返回的数据.
javascript ajax internet-explorer xmlhttprequest binary-data
有一个页面(url),我通过XMLHttpRequest请求它,但是我没有得到请求的URL的响应,它正在将请求发送到另一个页面,
请求---> page.php
从> directedpage.php获取响应
问题是如何获得响应网址?(示例中为directedpage.php)
有谁知道,什么XMLHttpRequest使网页能够做到,这是不能使用正常的HttpRequest?
我需要处理一个JSON对象,它是Excel VBA中XMLHTTPRequest的响应.我写了下面的代码,但它不起作用:
Dim sc As Object
Set sc = CreateObject("ScriptControl")
sc.Language = "JScript"
Dim strURL As String: strURL = "blah blah"
Dim strRequest
Dim XMLhttp: Set XMLhttp = CreateObject("msxml2.xmlhttp")
Dim response As String
XMLhttp.Open "POST", strURL, False
XMLhttp.setrequestheader "Content-Type", "application/x-www-form-urlencoded"
XMLhttp.send strRequest
response = XMLhttp.responseText
sc.Eval ("JSON.parse('" + response + "')")
Run Code Online (Sandbox Code Playgroud)
我收到错误运行时错误'429'ActiveX组件无法在行中 创建对象Set sc = CreateObject("ScriptControl")
解析JSON对象后,如何访问JSON对象的值?
PS My JSON对象示例: {"Success":true,"Message":"Blah blah"}
澄清一点:我没有任何问题在我的jQuery ajax调用中添加自定义标头,我希望自动将我的自定义标头添加到所有ajax调用中.
如果你看一下jquery $ .ajax自定义http头问题(不是我的问题),你会看到一个非常好的例子,说明如果手动为每个ajax调用实现代码的工作方式.
我想覆盖所有jQuery ajax调用的beforeSend.据jQuery的文档,我可以利用这样做jQuery.ajaxSetup() ,但有一个警告,说你可能不应该,可能会导致意外的行为,所有的东西.对于这种全局回调,他们建议使用.ajaxStart(). .ajaxStart()看起来很棒,除了它不公开XHR所以我可以添加标题.
我应该使用ajaxSetup添加beforeSend吗?有没有办法从ajaxStart访问XHR?其他选择?
我们网站的用户运行我们的Chrome插件,其中包括Chrome扩展程序开发页面中所述的XMLHttpRequest执行跨源请求.这已经运行了好几年了.但是,自从我们的用户升级到最新版本的Chrome(v38)后,这些请求都失败了.我们的网站使用HTTPS运行,并且通过我们的内容脚本加载的一些网址在HTTP上.消息是:
[已屏蔽]" https://www.ourpage.com/ "上的页面是通过HTTPS加载的,但是运行了来自" http://www.externalpage.com "的不安全内容:此内容也应通过HTTPS加载.
发生错误的报告行位于我发出HTTP调用的内容脚本中:
xhr.send(null);
Run Code Online (Sandbox Code Playgroud)
我无法控制外部页面,我宁愿不从我们自己的页面中删除SSL.问题:这是一个错误还是有一个我不知道的解决方法?
(注意:清单中的权限始终设置为<all_urls>已经工作了很长时间.将其设置为http://*/并https://*/没有帮助.)
google-chrome xmlhttprequest cross-domain google-chrome-extension
我正在使用以下$ .ajax命令从PhoneGap应用程序上传文件:
function updateProgress( evt ) {
if ( evt.lengthComputable ) {
var percentComplete = evt.loaded / evt.total * 100;
console.log( percentComplete + "%" );
}
}
$.ajax({
url: url,
type: "POST",
data: data,
cache: false,
dataType: "json",
processData: false,
contentType: false,
success: successCallback,
error: errorCallback,
xhr: function() {
var xhr = new window.XMLHttpRequest();
xhr.addEventListener( "progress", updateProgress, false);
return xhr;
}
});
Run Code Online (Sandbox Code Playgroud)
上传工作正常.但是,一旦上传完成,进度事件只会触发一次.它实际上并没有在上传期间触发 - 因此实际上不会显示上传进度.上传时只有暂停,然后显示100%.
我有什么想法我做错了吗?
在Chrome中,如果用户滚动所有XHR并且setTimeouts将被延迟,直到滚动停止并且我需要一个解决方法.此博客文章中描述了此行为.虽然这个功能有助于移动滚动,但对于无限滚动来说却是灾难性的,这正是我想要做的.
发生这种情况的证据:
所有其他浏览器都能正常工作,Chrome会显示一个空白屏幕,直到用户停止滚动.
网络面板将显示所有请求,pending直到滚动结束,然后它们全部完成.
把它放在一个片段中,运行它然后立即开始滚动.滚动完成后才会调用setTimeout.
var p = new Promise(function (resolve) {
setTimeout(function () {
console.log('resolving');
resolve();
}, 1000)
});
p.then(function () {
console.log('DONE!!');
})
Run Code Online (Sandbox Code Playgroud) xmlhttprequest ×10
ajax ×6
javascript ×5
jquery ×2
asp.net ×1
binary-data ×1
cordova ×1
cross-domain ×1
excel ×1
excel-vba ×1
forms ×1
html ×1
http-headers ×1
httprequest ×1
json ×1
response ×1
scroll ×1
security ×1
settimeout ×1
vba ×1