将Javascript数据从一个函数传递到另一个函数
我需要得到一个图像文件,并在angular中使用http发布它。Angular不为文件建模,因此我需要一个单独的函数来获取数据 如何将此函数中的数据传递到http请求将Javascript数据从一个函数传递到另一个函数,javascript,angularjs,Javascript,Angularjs,我需要得到一个图像文件,并在angular中使用http发布它。Angular不为文件建模,因此我需要一个单独的函数来获取数据 如何将此函数中的数据传递到http请求 var f = document.getElementById('imageFile').files[0], r = new FileReader(); r.onloadend = function(e){ var data = e.target.result; //************************
var f = document.getElementById('imageFile').files[0],
r = new FileReader();
r.onloadend = function(e){
var data = e.target.result;
//***********************************************
// This is where my data is
//***********************************************
}
r.readAsArrayBuffer(f);
var request = $http({
method: "post",
url: "/data/addToStore.php",
data: {
product_code: $scope.product_code,
product_name: $scope.product_name,
autoship_price: $scope.autoship_price,
regular_price: $scope.regular_price,
product_category_main: $scope.product_category_main,
product_desc: $scope.product_desc,
cat: $scope.cat,
/* ********************************************
This is where I need to get my data to
imageFile: $SOMETHING
******************************************** */
},
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});
根据我上面的评论:
var fileData = null;
var f = document.getElementById('imageFile').files[0],
r = new FileReader();
r.onloadend = function(e){
fileData = e.target.result;
//***********************************************
// This is where my data is
//***********************************************
}
r.readAsArrayBuffer(f);
var request = $http({
method: "post",
url: "/data/addToStore.php",
data: {
product_code: $scope.product_code,
product_name: $scope.product_name,
autoship_price: $scope.autoship_price,
regular_price: $scope.regular_price,
product_category_main: $scope.product_category_main,
product_desc: $scope.product_desc,
cat: $scope.cat,
imageFile: fileData
},
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});
您可以将其重构为作用域对象上的方法回调:
$scope.getFile = function (){
var f = document.getElementById('imageFile').files[0];
var r = new FileReader();
r.onloadend = function(e){
var data = e.target.result;
}
return r.readAsArrayBuffer(f);
}
var request = $http({
method: "post",
url: "/data/addToStore.php",
data: {
product_code: $scope.product_code,
product_name: $scope.product_name,
autoship_price: $scope.autoship_price,
regular_price: $scope.regular_price,
product_category_main: $scope.product_category_main,
product_desc: $scope.product_desc,
cat: $scope.cat,
fileData: $scope.getFile()
},
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});
只需将数据存储在一个全局变量中,该变量将在第二个函数中可用。我不希望将其放在全局变量中。因为它是一个图像文件,所以它可能相当大。我在寻找一种不用那样做就能通过的方法。我不太熟悉javascript,所以我不确定它是否可能。您有两个函数,让我们说
foo()
和bar()
。好啊因此,如果要将数据从bar()
传递到foo()
,请确保bar()
返回一个值,然后从foo()
调用bar()
。我不确定您在这里做什么。这只是将数据添加到范围中,以便我可以在我的应用程序中显示?正当我需要做的是将图像上传到S3存储桶。这有帮助吗?我想我误解了你的问题,所以编辑了它。您正在尝试将客户端上已有的映像获取到服务器,对吗?是的,这就是我要寻找的。我试过那样的方法,但没能成功。在您的代码中,var getFile=function{
需要修改为var getFile=function(){
才能工作。但这只是将整个函数的文本分配给了getFile。而且fileData:getFile()
调用一个不存在的函数。如果我将其更改为function getFile()){
没有值被传递到文件数据:
我还尝试将其分配给变量。var getFile=function getFile(){
thenfileData:getFile
也没有传递任何值。我没有运行代码,因此它有语法错误。您应该能够将所需的函数绑定到scope对象。我已经用建议的更改编辑了答案。您还可以使用内联函数:fileData:function(){/*获取文件*/}