2013-03-20 74 views
9

我正在使用Kendo UI上傳控件。我已經定義了劍道UI上傳這樣的:如何獲取從kendoui上傳成功或完成函數返回的值

<input type="file" name="resume" /> 
$("#file").kendoUpload({ 
    async: { 
     saveUrl: "/Home/SaveResume",    
     autoUpload: true 
     },    
     complete: function (e) 
     { 
      // here i want to get the text that is returned from the controller 
     } 
}); 

控制器代碼如下:

public ActionResult SaveResume(HttpPostedFileBase resume) 
{ 
    var text; 
    // code for the file to convert to text and assign it to text 
    return Json(text, JsonRequestBehavior.AllowGet); 
} 

返回代碼後,我想要檢索的功能齊全的代碼。我怎樣才能做到這一點?

+0

你試圖'的console.log(E)'看到所返回什麼?我願意成爲'e'不是'事件',而是'從srever返回的數據'。如果您使用'var data = $ .parseJSON(e)',您最終可能會得到一個數據對象,該數據對象具有您的控制器定義的屬性。 – Ohgodwhy 2013-03-20 06:50:55

+0

Yah數據變量包含類似於「服務器響應:實際字符串」的字符串。 – Pa1 2013-03-20 07:09:11

+0

被返回的項目是一個對象,你使用parseJSON,它不是你發送的對象?在這裏發佈對象,使用jsfiddle並保存它。 – Ohgodwhy 2013-03-20 07:10:10

回答

5

你可以得到的迴應像這樣

function onSuccess(e) 
{ 
    var response = e.response.data(); 
} 

成功函數,這些函數返回JSON可能是

return json(new { data=text, "text/plain" }); 
+0

請參閱nukefusion的答案。 'e.response。data()'不起作用。 – 8protons 2017-02-17 00:40:11

+0

響應的Content-Type應該是'text/plain'以將數據返回給事件處理程序,包括返回JSON對象。任何其他內容類型將被視爲錯誤。 'e.response.data()'應該是'e.response.data',因爲響應應該是一個對象。 要從控制器返回包含'data'屬性的對象,代碼應該是'return Json(new {data = text},「text/plain」);'。 – Suncat2000 2017-05-10 13:21:46

7

如果你只是傳遞一個字符串返回,你應該能夠做到:

function onSuccess(e) { 
    var text = e.XMLHttpRequest.responseText; 
} 

你也可以傳回一個更復雜的對象,如果需要的話:

// Object 
public class MyObject 
{ 
    public int ID { get; set; } 
    public string Text { get; set; } 
} 

// Controller Action 
public virtual ActionResult Upload(HttpPostedFileBase file) 
{ 
    return this.Json(new MyObject(), "text/plain"); 
} 

// Javascript Handler 
function onSuccess(e) { 
    var response = jQuery.parseJSON(e.XMLHttpRequest.responseText); 
    var id = response.ID; 
    var text = response.Text; 
} 
+0

我們只需要返回文本/純文本。我們可以發送其他格式,如html或xhtml – Pa1 2013-03-20 13:56:41

1

我會在此處添加我的答案以及其他有效答案。首先,雖然你會希望獲得成功的功能,而不是完整的功能返回的響應:

 $("#files").kendoUpload({ 
     async: { 
      saveUrl: url, 
      removeUrl: removeUrl, 
      autoUpload: true 
     }, 
     select: onFileSelect,  // function for when a file is selected 
     success: onFileSuccess,  // function that returns response after upload 
     complete: onFileComplete, // function after success 
     remove: onFileRemove,  // function for when a file is removed 
     }); 

的成功函數返回一個對象(通常人們將其命名爲E)

function onFileSuccess(e) { 

    console.log("e.response", e.response); 
    console.log("e.operation", e.operation); 
    console.log("e.XMLHttpRequest.status", e.XMLHttpRequest.status); 

    //e.operation is upload or remove 
    if (e.operation === "upload") { 
     // a file was added, get the response 
     var fileid = e.response; 
    } else { 
     // Do something after a file was removed 
    } 
} 

我的控制檯.LOG條目返回此數據:

console.log values

這是我如何從服務器返回我的數據:

public HttpResponseMessage InsertTempFile() 
    { 
     HttpPostedFile file = System.Web.HttpContext.Current.Request.Files[0]; 

     //........ 
     // Code that adds my file to the database 
     // and generates a new primary key for my file 
     //......... 

     var response = new HttpResponseMessage(HttpStatusCode.OK); 
     response.Content = new StringContent(myNewId.ToString()); 

     return response; 
    } 

的response.Content返回我的新的ID在e.response 的HttpStatusCode.Ok返回我的200狀態有,如果你檢查響應時返回,以及其他數據的一羣。

注意使用HttpResponseMessage和HttpStatuseCode你需要在你的類下面的命名空間:

using System.Net.Http; 
using System.Net;