2013-03-12 49 views
4

因此,我在MVC 4应用程序中使用FineUploader 3.3,这是一个非常酷的插件,非常值得名义成本。感谢您构建这个,非常有用。现在,我只需要让它正常工作。FineUploader OnComplete方法未触发。新手,需要一些手柄

我很新的MVC和绝对新的传回JSON,所以我需要一些帮助得到这个工作。以下是我正在使用的内容,全部在doc.ready中。

var manualuploader = $('#files-upload').fineUploader({ 
request: 
{ 
    endpoint: '@Url.Action("UploadFile", "Survey")', 
    customHeaders: { Accept: 'application/json' }, 
    params: { 
     //variables are populated outside of this code snippet 
     surveyInstanceId: (function() { return instance; }), 
     surveyItemResultId: (function() { return surveyItemResultId; }), 
     itemId: (function() { return itemId; }), 
     imageLoopCounter: (function() { return counter++; }) 
    }, 
    validation: { 
     allowedExtensions: ['jpeg', 'jpg', 'gif', 'png', 'bmp'] 
    }, 
    multiple: true, 
    text: { 
     uploadButton: '<i class="icon-plus icon-white"></i>Drop or Select Files' 
    },        
    callbacks: { 
     onComplete: function(id, fileName, responseJSON) { 
      alert("Success: " + responseJSON.success); 
      if (responseJSON.success) { 
       $('#files-upload').append('<img src="img/success.jpg" alt="' + fileName + '">'); 
       } 
      } 
    } 
} 

编辑:使用Internet Explorer 9我一直,然后切换到Chrome浏览器,Firefox和我可以上传就好了。 IE9需要什么?无论浏览器如何,验证都不起作用。

端点火灾,文件/参数被填充,所以这一切都很好!验证不会阻止用户选择此列表以外的任何内容,但我可以暂时处理此问题。我可以成功保存并执行我的上传所需的操作,减去启动OnComplete。实际上,在IE中,我得到了我目前所拥有的“打开/保存”对话框。

问题:onComplete(id,filename,responseJSON)中的函数参数是通过返回还是出路填充的?我只是对此感到困惑。我的JSON是否必须包含这些参数,并填充?

我不这样做(填充这些参数),并在C#我的输出方法返回JsonResult这样看,刚刚回国的“成功”(如果适用):

return Json(new { success = true }); 

我是否需要添加更多?这条线是在保存发生之后,我想要做的就是告诉用户一切都很好。我的Json中的'success'属性是否与responseJSON.success匹配?

我错过了什么,或者错了?我相信这也会帮助其他人,所以我希望你会花时间和协助。我很感激!谢谢。

回答

10

解决你的问题的项目:

  1. 关于“选择文件”对话框内的限制,你还必须设置acceptFiles验证选项。有关更多详细信息,请参见validation option section in the readme
  2. 您的validation选项属性在错误的地方。它不应该在request属性/选项下。您的text,multiplecallbacks选项/属性也是如此。另外,你没有正确设置jQuery插件的回调。
  3. IE中的打开/保存对话框是由您的服务器未返回带有正确“Content-Type”标头的响应引起的。您的回应的内容类型应该是“文本/纯文本”。有关更多详细信息,请参阅server-side readme
  4. 在处理响应客户端时,您的服务器返回的任何响应将由Fine Uploader使用JSON.parse进行解析。在服务器响应中调用JSON.parse的结果将作为responseJSON参数传递给onComplete回调处理程序。如果您想要将特定信息从服务器传递到您的客户端代码(例如您可能想要显示客户端的一些文本,上传文件的新名称等),则可以通过向您的应用程序添加适当的属性服务器响应。这些数据将在您的onComplete处理程序中提供给您。如果您对此没有任何需求,则可以简单地返回您当前返回的“成功”响应。我链接到的服务器端自述文件提供了有关所有这些信息的更多信息。

为了澄清我在#2说,你的代码应该是这样的:

$('#files-upload').fineUploader({ 
    request: { 
     endpoint: '@Url.Action("UploadFile", "Survey")', 
     customHeaders: { Accept: 'application/json' }, 
     params: { 
      //variables are populated outside of this code snippet 
      surveyInstanceId: (function() { return instance; }), 
      surveyItemResultId: (function() { return surveyItemResultId; }), 
      itemId: (function() { return itemId; }), 
      imageLoopCounter: (function() { return counter++; }) 
     } 
    }, 
    validation: { 
     allowedExtensions: ['jpeg', 'jpg', 'gif', 'png', 'bmp'] 
    }, 
    text: { 
     uploadButton: '<i class="icon-plus icon-white"></i>Drop or Select Files' 
    } 
}) 
    .on('complete', function(event, id, fileName, responseJSON) { 
     alert("Success: " + responseJSON.success); 
     if (responseJSON.success) { 
      $('#files-upload').append('<img src="img/success.jpg" alt="' + fileName + '">'); 
     } 
    });        
+0

真棒!我得到它的工作,非常感谢。我不得不说,我对什么元素(和其他部分......)感到困惑。你的服务和速度帮助你是惊人的。再次感谢。 – RichieMN 2013-03-12 19:17:06