如果文件上传功能支持XHR2,我的应用程序需要做不同的准备.检查这些功能是否受支持的安全方法是什么?例如,仅仅检查一下XMLHttpRequest(或MS等价物)upload属性是否足够?喜欢...
var xhr = new XMLHttpRequest();
if (typeof xhr.upload !== "undefined") {
do nice stuff
}
else {
do oldschool stuff
}
Run Code Online (Sandbox Code Playgroud)
或者这不安全吗?
从我在MDN中读到的参考文献中可以看出
如果为TRUE(默认值),则在服务器的响应尚未到达时,JavaScript函数的执行将继续.
这是AJAX中的A.
我一直在使用AJAX,但当我读到它时,我有点困惑.我认为问题可能是我不清楚地理解AJAX概念.我知道当然AJAX不会刷新页面,这意味着与服务器的连接和响应完全在后台完成.
但根据该引用我可以想象的是,如果我的JavaScript中有这样的代码:
//true, therefore process the function while server retrieves url
var xmlResponse;
var url = "http://example.com/file.xml";
xml_req.open("GET", url, true);
xml_req.onreadystatechange = function() {
if(xml_req.readyState == 4 && xml_req.status == 200) {
if(xml_req.responseText != null)
xmlResponse = xml_req.responseXML; //server response may not yet arrive
else {
alert("failed");
return false;
}
};
xml_req.send(null);
Run Code Online (Sandbox Code Playgroud)
这是否意味着在服务器仍在检索数据的意义上,xmlResponse可能是未定义的?有人可以解释一下AJAX技术中的执行流程究竟是什么?提前致谢.
试图从XHR对象获取Request标头,但没有运气,该对象的隐藏方法或属性是否会暴露浏览器发送的标头?
我已经知道如何设置自定义请求标头并查看响应标头,我希望获得所有已发送的REQUEST标头的列表,浏览器创建的标头和我的自定义标头.
我正在使用webkit/chrome,不关心其他浏览器.
编辑:我不打算监视请求,我正在构建一个Web应用程序,我需要列出这些标题并在应用程序中显示它们,请不要告诉我有关小提琴,萤火虫和铬工具,这不是什么我在找.
我搜索了stackoverflow但得到了相互矛盾的答案:
Ajax密集型页面:每次重用相同的XMLHttpRequest对象或创建新对象?
此外,w3schools.com上有一个推荐:
如果您的网站上有多个AJAX任务,则应创建一个用于创建XMLHttpRequest对象的标准函数,并为每个AJAX任务调用此函数.
为什么这个推荐?我在我的页面上使用全局XMLHttpRequest对象来处理所有Ajax任务.
我有一个使用XMLHttpRequest下载二进制资源的网页.
在Firefox和Gecko中,我可以使用responseText来获取字节,即使字节流包含二进制零.我可能需要强制使用mimetype overrideMimeType()来实现这一点.但是,在IE中,responseText不起作用,因为它似乎终止于第一个零.如果读取100,000个字节,而字节7是二进制零,则只能访问7个字节.IE的XMLHttpRequest公开了一个responseBody访问字节的属性.我已经看到一些帖子暗示直接从Javascript以任何有意义的方式访问这个属性是不可能的.这听起来很疯狂.
xhr.responseBody 是从VBScript访问,因此明显的解决方法是在VBScript在网页中定义的方法,然后从JavaScript调用该方法.有关一个示例,请参阅jsdap. 编辑:不要使用这个VBScript !!
var IE_HACK = (/msie/i.test(navigator.userAgent) &&
!/opera/i.test(navigator.userAgent));
// no no no! Don't do this!
if (IE_HACK) document.write('<script type="text/vbscript">\n\
Function BinaryToArray(Binary)\n\
Dim i\n\
ReDim byteArray(LenB(Binary))\n\
For i = 1 To LenB(Binary)\n\
byteArray(i-1) = AscB(MidB(Binary, i, 1))\n\
Next\n\
BinaryToArray = byteArray\n\
End Function\n\
</script>');
var xml = (window.XMLHttpRequest)
? new XMLHttpRequest() // Mozilla/Safari/IE7+
: (window.ActiveXObject)
? new ActiveXObject("MSXML2.XMLHTTP") // IE6
: null; // Commodore 64?
xml.open("GET", url, true); …Run Code Online (Sandbox Code Playgroud) 我正在努力为这个项目学习AJAX.我有一个网站,可以加载患者正在服用的药物.
我以递归方式调用这个AJAX函数,以便它附加一个包含单一药物和7天历史记录的新表.我在让代码在FF和IE中执行时遇到问题.铬合金完美无缺.我有警告显示xmlhttp.status,这就是我得到的:
xmlhttp.status == 500(内部服务器错误).
我评论了所有的递归,所以它缩小到这个代码的代码.(x跟踪药物的数量,所以我知道什么时候停止)
function LoadMeds()
if ( x == MaxMedCount )
{
document.getElementById("the_day").value = parseInt(document.getElementById("the_day").value)+7;
}
if ( x == (MaxMedCount - 1) )
{
document.getElementById("x").value = x + 1;
show();
}
else
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
try
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var div = document.createElement('div');
div.innerHTML= xmlhttp.responseText;
document.getElementById('MedTable').appendChild(div);
document.getElementById("the_med_").value = the_med_;
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个文件的路径,我想发送到服务器的休息Web服务.我正在使用xmlhttprequest对象.这篇文章如下:
var url = "http://localhost:8080/RestWSGS/jersey/gridsense";
var boundary = "--------------" + (new Date).getTime();
xmlHttp.open('POST', url, true);
xmlHttp.onreadystatechange = function ()
{
if (this.readyState != 4)
return;
var result =this.responseText;
document.write(result);
};
xmlHttp.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);
var part ="";
part += 'Content-Disposition: form-data; ';
part += 'name="' + document.getElementById("filename").name + '" ; ';
//alert(document.getElementById("filename").value);
part += 'filename="'+ document.getElementById("filename").value + '";\r\n';
part += "Content-Type: application/xml";
part += "\r\n\r\n"; // marks end of the headers part
part += 'filename="'+ document.getElementById("filename").value + '";\r\n';
part+= …Run Code Online (Sandbox Code Playgroud) 当使用$ http对象访问Web服务时,Angular.js会自动向请求添加X-Requested-With:XMLHttpRequest标头.
我使用CORS访问的Web服务不支持X-Requested-With标头,所以我试图消除它,但我不能访问$ httpProvider对象.我得到一个未定义的对象错误,如果我在控制器参数中引用它,那么angular注入它我得到一个"错误:未知的提供者:$ httpProviderProvider < - $ httpProvider"
所以我想知道如何访问$ httpProvider,就像它在文档(http://docs.angularjs.org/api/ng.$http)中所说的那样告诉angular.js不要发送那个头...
正如这里建议的那样:https://gist.github.com/HenrikJoreteg/2502497,我正在尝试为我的jQuery.ajax()文件上传添加onprogress功能.上传工作正常,并且onprogress事件正在触发,但不是我预期的 - 不是在某个时间间隔重复触发,它只在上传完成时触发一次.有没有办法指定onprogress刷新的频率?或者,我是否正在尝试做一些无法做到的事情?这是我的代码:
$.ajax(
{
async: true,
contentType: file.type,
data: file,
dataType: 'xml',
processData: false,
success: function(xml)
{
// Do stuff with the returned xml
},
type: 'post',
url: '/fileuploader/' + file.name,
xhrFields:
{
onprogress: function(progress)
{
var percentage = Math.floor((progress.total / progress.totalSize) * 100);
console.log('progress', percentage);
if (percentage === 100)
{
console.log('DONE!');
}
}
}
});
Run Code Online (Sandbox Code Playgroud) 我在将使用javascript创建的blob上传到我的服务器时遇到问题.基本思想是用户上传图像,并在javascript中我裁剪图像并在传输之前对其进行下采样.
图像处理工作正常,但上传本身无法正常工作.以下是执行从canvas到blob的上传和转换的代码
function uploadCanvasData()
{
var canvas = $('#ImageDisplay').get(0);
var dataUrl = canvas.toDataURL("image/jpeg");
var blob = dataURItoBlob(dataUrl);
var formData = new FormData();
formData.append("file", formData);
var request = new XMLHttpRequest();
request.onload = completeRequest;
request.open("POST", "IdentifyFood");
request.send(formData);
}
function dataURItoBlob(dataURI)
{
var byteString = atob(dataURI.split(',')[1]);
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++)
{
ia[i] = byteString.charCodeAt(i);
}
var bb = new Blob([ab], { "type": mimeString }); …Run Code Online (Sandbox Code Playgroud) xmlhttprequest ×10
javascript ×7
ajax ×6
file-upload ×2
angularjs ×1
asynchronous ×1
html5 ×1
jquery ×1
progress ×1
web-services ×1
webkit ×1