我试图加载一个图像客户端和base64编码服务器返回的字节,以传递它来执行一些处理.IE具有XMLHttpRequest对象的RequestBody属性,但我似乎无法使用它,并且RequestText被截断.在Firefox中,RequestText存在,但似乎已损坏.
我正在使用FormData来aj文件上传.上传有效,但问题是永远不会调用"错误"回调.即使我的HTTP响应是500内部服务器错误(为了测试这个我调整服务器以500响应),调用"加载"回调.
function upload_image() {
var form = document.getElementById('upload_image_form');
var formData = new FormData(form);
var xhr = new XMLHttpRequest();
xhr.addEventListener("load", function(e) {
alert("Success callback");
}, false);
xhr.addEventListener("error", function(e) {
alert("Error callback");
}, false);
xhr.open("POST", "/upload_image");
xhr.send(formData);
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我在Chrome上测试了这个.
我用来event.clipboardData从剪贴板获取图像,然后上传它服务器,代码:
var items = e.clipboardData.items;
for(var i=0;i<items.length;i++)
{
if(items[i].type.indexOf("image")!=-1)
{
var blob=items[i].getAsFile();
var data = new FormData();
data.append("ImageFileField",blob);
_post2("url...",data);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:_post2()是一个XMLHttpRequest用于上传工作的功能.
上面的代码工作正常,剪贴板中的图像可以直接上传到我的服务器.
但我发现问题,图像上传到服务器的文件名固定为"blob",我可以在上传到服务器之前修改文件名吗?
这是上传数据的详细信息:
请求有效负载
------ WebKitFormBoundaryW0NQVOkdrfkYGWV3
Content-Disposition:form-data; NAME = "%% File.48257279001171c9.2c36671da7f1b6c9482575de002e1f14 $ Body.0.3D8." filename = "blob"内容类型:image/png
------ WebKitFormBoundaryW0NQVOkdrfkYGWV3--
混合内容:“”处的页面是通过 HTTPS 加载的,但请求了不安全的资源“”。该请求已被阻止;内容必须通过 HTTPS 提供。
当我的页面通过XHR加载内容时,如果用户单击停止按钮或单击转到另一个页面,则会调用XHR error()函数.除了在页面上看到大量(红色)错误消息的用户震惊之外,这通常不是什么大问题.
消息是有效的 - 检索内容确实有错误 - 但这是由于用户交互,而不是因为系统故障.
有没有办法区分(404 | 500 |超时错误)和用户点击浏览器的停止按钮导致的错误?
编辑:我正在使用Dojo(因此错误函数引用),但我相信这将是任何XHR实现中常见的情况.调用error()时,我将查看xhr对象的readyState
是否可以发送xhr HTTP HEAD请求以仅获取第一个请求的标头响应,而不是像重定向那样自动跟随301,302?我只对获取网址的新位置感兴趣.例:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(data) {
if (xhr.readyState == 4) {
if (xhr.status == 301 || xhr.status == 302) {
// Get new location url don't GET it
}
}
};
xhr.open('HEAD', url, true);
xhr.send();
Run Code Online (Sandbox Code Playgroud)
http://www.w3.org/TR/XMLHttpRequest/#infrastructure-for-the-send-method似乎指定的请求应遵循,是有没有办法制止?
我目前正在编写JavaScript并且对回调感到困惑.我发现它不是那种内置函数...
我现在正在阅读O'Relly JavaScript第5版,它显示的示例代码如下所示:
getText = function(url, callback) // How can I use this callback?
{
var request = new XMLHttpRequest();
request.onreadystatechange = function()
{
if (request.readyState == 4 && request.status == 200)
{
callback(request.responseText); // Another callback here
}
}
request.open('GET', url);
request.send();
}
Run Code Online (Sandbox Code Playgroud)
基本上,我想我不明白一般的想法callback......有人可以写一个示例代码来利用callback上述优势吗?
我正在使用XMLHttpRequest从javascript代码发送文件到django view.我需要检测,文件是否已发送或是否发生了一些错误.我使用jquery编写以下javascript.
理想情况下,我想向用户显示该文件未上传的错误消息.是否有某种方法可以执行此操作javascript?
我尝试通过返回一个success/failure消息来做这个django view,把success/failed messageas json和发送回来的序列化json django view.为此,我做了xhr.open() non-asynchronous.我试图打印xmlhttpRequest对象的responseText.console.log(xhr.responseText) 节目
response= {"message": "success"}
Run Code Online (Sandbox Code Playgroud)
我想知道的是,这是否是正确的方法.在许多文章中,我发现了警告
建议不要使用async = false
那么,有没有办法找出文件是否已发送,同时保持xhr.open()异步?
$(document).ready(function(){
$(document).on('change', '#fselect', function(e){
e.preventDefault();
sendFile();
});
});
function sendFile(){
var form = $('#fileform').get(0);
var formData = new FormData(form);
var file = $('#fselect').get(0).files[0];
var xhr = new XMLHttpRequest();
formData.append('myfile', file);
xhr.open('POST', 'uploadfile/', false);
xhr.send(formData);
console.log('response=',xhr.responseText);
} …Run Code Online (Sandbox Code Playgroud) 浏览器对于并行XHR的数量(现在约为6)具有每主机限制.
此限制是否适用于多路复用HTTP/2连接?
我正在尝试调用服务,它可以在DHC中运行,但是当我尝试调用我的angular 2项目时,它会崩溃,方法请求是POST,从具有电子邮件和密码的正文接收对象,以及响应是一个令牌,我将在整个项目中用于授权.
这是我的代码.
import { Injectable } from '@angular/core';
import { Http, Response, Headers, Request ,RequestOptions ,RequestMethod } from '@angular/http';
import {Observable} from 'rxjs/Rx';
import 'rxjs/add/operator/map';
@Injectable()
export class LoginService {
constructor(private http:Http) {
}
getToken(){
var baseUrl = "xxx.xxx.x.xxx:xxxx/project/v1/admin/login";
var headers = new Headers();
headers.append("Content-Type", 'application/json');
var options = new RequestOptions({ headers: headers });
var objeto = {'email': 'xxxxxx', 'pass':'xxxx' }
var body2 = JSON.stringify(objeto);
var xhr = new XMLHttpRequest();
return this.http
.post(baseUrl, body2, options)
.map((response: Response) => response.json()) …Run Code Online (Sandbox Code Playgroud) xmlhttprequest ×10
javascript ×8
ajax ×2
browser ×2
angular ×1
asynchronous ×1
callback ×1
html5 ×1
http2 ×1
image ×1
jwt ×1
mixed ×1
resources ×1
restriction ×1
typescript ×1