2013-03-20 3 views
9

Używam kontroli przesyłania Kendo UI. Mam zdefiniowane przesyłanie Kendo UI tak:Jak uzyskać wartość, która jest zwracana z sukcesu przesyłania kendoui lub pełnej funkcji

<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 
     } 
}); 

Kod kontroler jest jak:

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); 
} 

Po powrocie kod Chcę pobrać kod w pełnej funkcjonalności. Jak mogę to zrobić?

+0

Czy próbował 'console.log (e)', aby zobaczyć, co się wrócili? chcę być "e" nie jest "zdarzeniem", ale raczej "danymi zwracanymi przez srevera". Jeśli użyjesz 'var data = $ .parseJSON (e)' prawdopodobnie otrzymasz obiekt danych, który ma właściwości zdefiniowane przez twój kontroler. – Ohgodwhy

+0

Yah zmienna danych zawiera ciąg taki jak 'Server Response: the actual string'. – Pa1

+0

Zwracany element 'is' jest obiektem, użyłeś parseJSON i nie był to obiekt, który wysyłasz? opublikuj tutaj obiekt, użyj jsfiddle i zapisz go. – Ohgodwhy

Odpowiedz

5

można uzyskać odpowiedź do funkcji sukces jak ten

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

gdzie json zysk może być

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

, proszę zobaczyć odpowiedź nukefusion. 'e.response.data() 'nie działa. – 8protons

+0

Typ treści odpowiedzi powinien być "text/plain", aby zwrócić dane do obsługi zdarzenia, w tym zwracanie obiektu JSON. Każdy inny typ zawartości będzie traktowany jako błąd. 'e.response.data()' powinno być 'e.response.data', ponieważ oczekuje się, że odpowiedź będzie obiektem. Aby zwrócić obiekt zawierający właściwość 'data' ze sterownika, kod powinien wyglądać tak:' return Json (new {data = text}, "text/plain"); '. – Suncat2000

7

Jeśli tylko przechodzącej ciąg powrotem powinieneś być w stanie to zrobić:

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

Można również przejść z powrotem do bardziej złożonego obiektu, jeśli jest to wymagane:

// 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

Musimy zwrócić tylko tekst/zwykły. czy możemy wysłać inne formaty, takie jak html lub xhtml – Pa1

1

Dodam moją odpowiedź wraz z innymi poprawnymi odpowiedziami tutaj. Najpierw jednak będziemy chcieli uzyskać zwracanej odpowiedzi w funkcji sukcesu zamiast kompletnej funkcji:

 $("#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 
     }); 

Kontrole na funkcji sukcesu zwraca obiekt (normalnie ludzie nazwij go 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 
    } 
} 

konsolę .log wpisy powrócić te dane:

console.log values

to jak wrócę moje dane z serwera:

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 wraca mój nowy identyfikator w e.response HttpStatusCode.Ok wraca mój status 200. Istnieje kilka innych danych, które są zwracane jako dobrze, jeśli przejrzeć odpowiedź.

Zauważ, że użycie HttpResponseMessage i HttpStatuseCode trzeba obejmują następujące obszary nazw w swojej klasie:

using System.Net.Http; 
using System.Net; 
Powiązane problemy