【发布时间】:2017-08-22 22:25:57
【问题描述】:
我通常使用 ajax,但以前从未用它发送文件。我最初的研究表明您无法使用 ajax 发送文件,所以我找到并使用了这种方法;但后来的研究表明可以使用 ajax 发送文件。
现在我担心更改它,因为目前一切正常,但我仍然不明白 html/jscript 如何处理文件。所以我想知道,如何将这个函数转换为Ajax,而不需要我更改来更改upload_metric_post.php 代码?
function uploadMetric(file){
var MetricID = $("#MetricID").val();
var ReportPeriod = $("#ReportPeriod").val();
if(MetricID == ""){
$("#upload_results").addClass("alert-danger");
$("#upload_results").removeClass("alert-success");
$("#upload_results").html("Please select the MetricID before uploading.");
}else{
var url = 'php/upload_metric_post.php';
var xhr = new XMLHttpRequest();
var fd = new FormData();
xhr.open("POST", url, true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
// Request went thru ok, handle response.
var response = xhr.responseText;
console.log(response);
var jsonResponse = JSON.parse(response);
if(jsonResponse["success"] == false){
var errors = jsonResponse["msg"] + jsonResponse["error"];
$("#upload_results").addClass("alert-danger");
$("#upload_results").removeClass("alert-success");
$("#upload_results").html(errors);
$("#dropped_rows_panel").html(jsonResponse["bad_rows"]);
$("#start_over_btn").show();
$("#process_btn").hide();
}else if(jsonResponse["success"] == true){
$("#upload_results").addClass("alert-success");
$("#upload_results").removeClass("alert-danger");
$("#upload_results").html(jsonResponse["msg"]);
$("#dropped_rows_panel").html(jsonResponse["bad_rows"]);
$("#start_over_btn").show();
$("#process_btn").show();
}
}
};
fd.append("MetricID", MetricID);
fd.append("ReportPeriod", ReportPeriod);
fd.append("upload_file", file);
xhr.send(fd);
}
}
这是我在整个代码中使用的标准,以前从未发送过文件,我真的不知道如何将其转换为我的标准:
function get_assets(display_qty, go_page, sorts, sorts_order, filters_ordered, CallBack) {
$.ajax({
method: "POST",
url: "php/assets_post.php",
data: {
display_qty: display_qty,
go_page: go_page,
sorts: sorts,
sorts_order: sorts_order,
filters_ordered: filters_ordered
},
success: function(result){
CallBack(result);
},
error: function(result){
CallBack(result);
}
});
}
【问题讨论】:
-
不要重新发明轮子dropzonejs.com
-
有类似的问题,如果你先看看它会对你有所帮助。这是链接stackoverflow.com/questions/10654429/…
-
看起来两种方式都使用 AJAX 来处理请求。 xhr.open 等是编写 AJAX 调用的普通 JavaScript 方式。您使用 $.ajax 列出的方法是 jquery 方法。我喜欢它,它更干净,所以我通常用 jquery 编写我的,但他们做同样的事情,所以如果它现在可以工作......
标签: javascript php jquery ajax xmlhttprequest