Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Javascript数据从一个函数传递到另一个函数_Javascript_Angularjs - Fatal编程技术网

将Javascript数据从一个函数传递到另一个函数

将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; //************************

我需要得到一个图像文件,并在angular中使用http发布它。Angular不为文件建模,因此我需要一个单独的函数来获取数据

如何将此函数中的数据传递到http请求

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(){
then
fileData:getFile
也没有传递任何值。我没有运行代码,因此它有语法错误。您应该能够将所需的函数绑定到scope对象。我已经用建议的更改编辑了答案。您还可以使用内联函数:fileData:function(){/*获取文件*/}