异步:为什么是表单post重定向
Asynchronous : Why is form post redirecting?
目标:
- 发布表单
- 上传文件到AWS S3
- 在HTML页面上显示有效的消息
使用Node JS, HTML.
页面继续等待服务器。从服务器端来看,似乎所有的函数都已经完成了运行。
你能分享一下这个问题的经验/任何调试方法吗?
HTML:<form method="POST" action="/submit_form/">
<input type="hidden" id="avatar_url" name="avatar_url" value="/public/default.png" />
<input type="text" name="username" placeholder="Username" /><br />
<input type="text" name="full_name" placeholder="Full name" /><br /><br />
<input id="form_input" type="submit" value="Update profile" />
</form>
My Form functions:
(function(){
document.getElementById("form_input").onclick = init_upload;
})();
function init_upload(){
var file = dataURItoBlob(document.getElementById('preview').src);
if(file == null){
alert("No file selected.");
return;
}
get_signed_request(file);
}
function get_signed_request(file){
var xhr = new XMLHttpRequest();
var file_name = "an-image-name";
xhr.open("GET", "/sign_s3?file_name="+file_name+"&file_type="+file.type);
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
if(xhr.status === 200){
var response = JSON.parse(xhr.responseText);
upload_file(file, response.signed_request, response.url);
console.log("xhr status 200 : file : ", file);
console.log("xhr status 200 : response.signed_request : ", response.signed_request);
console.log("xhr status 200 : response.url : ", response.url);
}
else{
alert("Could not get signed URL.");
}
}
};
xhr.send();
}
和管理代码的帖子:
app.post('/submit_form', function(req, res){
//something to be done
console.log("submit form .....")
});
app.get('/sign_s3', function(req, res){
aws.config.update({accessKeyId: AWS_ACCESS_KEY, secretAccessKey: AWS_SECRET_KEY});
var s3 = new aws.S3();
var s3_params = {
Bucket: S3_BUCKET_CREATION,
Key: req.query.file_name,
Expires: 60,
ContentType: req.query.file_type,
ACL: 'public-read'
};
s3.getSignedUrl('putObject', s3_params, function(err, data){
if(err){
console.log("/sign S3 : error");
console.log(err);
}
else{
var return_data = {
signed_request: data,
url: 'https://'+S3_BUCKET_CREATION+'.s3.amazonaws.com/'+req.query.file_name
};
res.write(JSON.stringify(return_data));
console.log("/sign S3 : end");
res.end("200");
}
});
});
您需要使用res.status(200).end();
发送响应,否则,您的客户端将一直等待永远不会到达的服务器响应。
相关文章:
- AJAX不会在文件上传后重定向到网页-POST方法
- javascript:发送带有音频文件的POST,然后重定向到新页面
- 如何在fetch post调用后管理重定向请求
- 带有post值的JS jQuery重定向,不带<表单>
- Node.js POST请求,无重定向
- 试图在表单post之后使用jQuery.post()重定向用户
- 防止表单 POST 重定向发生,但仍保留引导验证
- 使用 Ajax POST 查询 MVC 控制器,然后使用模型重定向
- 在 POST 后使用 Location 标头和 jQuery 重定向
- $.post 不断重定向我
- JavaScript 窗口重定向安全地传递参数 (POST)
- 如何使用Javascript通过“POST”方法重定向
- 使用 Javascript/jQuery 重定向时将 POST 数据发送到顶级 iframe
- 如何使用jquery在带有“POST”的新选项卡中进行重定向
- 在 POST ajax 处理程序中更改 window.location 会发出新的 ajax 调用,而不是重定向
- javascript重定向到带有表单操作post的页面,然后返回到带有输入值的上一页
- HTML POST重定向问题
- 使用post重定向并获取重定向的成功
- Firefox的post重定向不起作用
- 异步:为什么是表单post重定向