2013-12-23 37 views
3

我一直在为此打了很长一段时间,所以我认为现在是时候伸出援手。我有一些已经存在的使用jQuery File Uploader插件的代码,允许我将文件上传到我的网络服务器。我遇到的麻烦是列出Web服务器上已存在的文件。显示已存在文件的问题jQuery文件上传器

这里是我的初始化运行在客户端代码:

 $('#fileupload').fileupload({ 
      disableImageResize: false, 
      url: '/api/upload', 
      done: function (e, data) { // data is checked here } 
     }); 

     // Load existing files: 
     $('#fileupload').addClass('fileupload-processing'); 
     $.ajax({ 
      url: $('#fileupload').fileupload('option', 'url'), 
      dataType: 'json', 
      context: $('#fileupload')[0], 
      data: { action: "FileList", blob: "uts", path: "Unit 14/Binaries/" } 
     }).always(function (e, data) { 
      $(this).removeClass('fileupload-processing'); 
     }).done(function (result) { 
      $(this).fileupload('option', 'done') 
       .call(this, $.Event('done'), { result: result }); 
     }); 

现在,我试图返回在服务器端匹配的JSON response akin to the documentation预先存在的文件列表。我在服务器端上的ASP.NET 代码如下(使用我的FilesStatus class有两个伪造文件称为“Something”和“SomethingElse”)。

// Get a list of files from 
    private void FileList(HttpContext hc) 
    { 
     var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
     List<FilesStatus> fs_list = new List<FilesStatus>(); 

     fs_list.Add(new FilesStatus("Something", 124)); 
     fs_list.Add(new FilesStatus("SomethingElse", 124)); 

     HttpContext.Current.Response.AddHeader("Pragma", "no-cache"); 
     HttpContext.Current.Response.AddHeader("Cache-Control", "private, no-cache"); 
     hc.Response.AddHeader("Content-Disposition", "inline; filename=\"files.json\""); 
     var result = new { files = fs_list.ToArray() }; 
     hc.Response.Write(serializer.Serialize(result)); 
     hc.Response.ContentType = "application/json"; 
     HttpContext.Current.Response.StatusCode = 200; 
    } 

在AJAX代码的“完成”功能,我看到我相信这是在客户端的正确响应。在这里,你可以看到我的JavaScript调试器的格式(即顶级“文件”是一个数组):

enter image description here

这些文件不会填充到文件列表,虽然。在主done()函数中标记为“//数据的代码在此检查”的代码显示数组可以作为“data.result.files”而不是“data.files”访问。我可以改变“.call(this,$ .Event('done'),{result:result});”到“.call(this,$ .Event('done'),{files:result.files});”所以“data.files”是文件数组的位置,但这并不能解决问题。我似乎无法获得任何预先存在的文件加载到列表中。

有没有人看到我做错了什么?节日快乐。

回答

0

我被改写,我有做()方法​​:

done: function (e, data) { // data is checked here } 

我这样做是为了调试,但显然它会阻止被加载并调用下载模板预先存在的文件列表。

0

当你改变线路,会发生什么:

hc.Response.Write(serializer.Serialize(result)); 

hc.Response.Write(serializer.Serialize(fs_list.ToArray())); 

它看起来像串行走的是变量名进去,当你序列化您的文件说明。 '结果'JSON对象应该从响应中消失。

+0

我认为“结果”仅仅来自“完成”函数的参数被命名为“结果”的事实。这不幸的是没有帮助:\感谢您的回应! – gnychis

+0

我解决了我的错误,我不能给自己的赏金...所以我只是想给你,因为试图帮助我。请享用。 – gnychis