Javascript 将完整HTML页面提交到x-www-form-urlencoded作为查询字符串编码
我试图提交完整的HTML页面到服务器,但我没有一个表单提交。我不确定我是否做得正确,但使用javascript我试图将json对象{html:htmlPage,fileName:“foo”}重新构建为查询字符串,然后将其提交给服务器这是我的代码。当我使用str控制台时,HTML页面看起来不正确。我正在使用jqueryJavascript 将完整HTML页面提交到x-www-form-urlencoded作为查询字符串编码,javascript,jquery,html,query-string,Javascript,Jquery,Html,Query String,我试图提交完整的HTML页面到服务器,但我没有一个表单提交。我不确定我是否做得正确,但使用javascript我试图将json对象{html:htmlPage,fileName:“foo”}重新构建为查询字符串,然后将其提交给服务器这是我的代码。当我使用str控制台时,HTML页面看起来不正确。我正在使用jquery var htmlPage = $("html").html(); var str = { html: htmlPage, fileName: "foo" }
var htmlPage = $("html").html();
var str = { html: htmlPage, fileName: "foo" };
var params = jQuery.param( str );
var xhr = new XMLHttpRequest();
xhr.open('POST', '/', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function () {
if (this.status === 200) {
var filename = "";
var disposition = xhr.getResponseHeader('Content-Disposition');
if (disposition && disposition.indexOf('attachment') !== -1) {
var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
var matches = filenameRegex.exec(disposition);
if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
}
var type = xhr.getResponseHeader('Content-Type');
var blob = new Blob([this.response], { type: type });
if (typeof window.navigator.msSaveBlob !== 'undefined') {
window.navigator.msSaveBlob(blob, filename);
} else {
var URL = window.URL || window.webkitURL;
var downloadUrl = URL.createObjectURL(blob);
if (filename) {
var a = document.createElement("a");
if (typeof a.download === 'undefined') {
window.location = downloadUrl;
} else {
a.href = downloadUrl;
a.download = filename;
document.body.appendChild(a);
a.click();
}
} else {
window.location = downloadUrl;
}
setTimeout(function () { URL.revokeObjectURL(downloadUrl); }, 100); // cleanup
}
}
};
xhr.onerror = function(e) {
console.log('in error', e);
};
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
xhr.send(params);
如果您有jQuery,那么只需使用ajax即可。 这将base64编码你的html,然后在服务器端你只需要base64解码它,然后使用它。嘿,整个html代码不能算作表单数据,它是“text/html” (更新)试试看,让我知道
// javascript
function _upload(html_string)
{
return $.ajax({
url: '/',
type: 'POST',
headers: {"Content-Type": "application/x-www-form-urlencoded"},
data: {html: btoa(html_string), fileName: "foo" },
success: function(data, textStatus, req){
console.log(textStatus);
},
error: function(req , textStatus, errorThrown){
console.log("jqXHR["+textStatus+"]: "+errorThrown);
console.log('jqXHR.data', req.responseText);
}
});
}
嘿,谢谢你的回答,为什么我可以使用邮递员发送整个html?我的服务器正在使用变量x-www-form-urlencoded。没有JSON