如何获取剑道上传成功或完成函数返回的值

Posted

技术标签:

【中文标题】如何获取剑道上传成功或完成函数返回的值【英文标题】:How to get the value that is returned from the kendoui upload success or complete function 【发布时间】:2013-03-09 03:55:53 【问题描述】:

我正在使用 Kendo UI 上传控件。我已经这样定义了 Kendo UI 上传:

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

返回代码后,我想检索完整函数中的代码。我该怎么做?

【问题讨论】:

你有没有试过console.log(e)看看返回了什么?我愿意成为e 不是event,而是data returned from the srever。如果您使用var data = $.parseJSON(e),您最终可能会得到一个具有控制器定义的属性的数据对象。 是的,数据变量包含像Server Response: the actual string这样的字符串。 被返回的项目is 一个对象,你使用了 parseJSON 并且它不是你发送的对象?在此处发布对象,使用 jsfiddle 并保存。 解析后我得到了像Server Resonse这样的数据:数据。我现在如何获取实际的字符串。 此 Kendo UI 帮助主题描述了如何从保存处理程序中检索数据:docs.kendoui.com/getting-started/using-kendo-with/aspnet-mvc/… 【参考方案1】:

你可以像这样得到成功函数的响应

function onSuccess(e)

    var response = e.response.data();

返回的 json 可能在哪里

return Json(new  data = text , "text/plain");

【讨论】:

请参阅 nukefusion 的回答。 e.response.data() 不起作用。 响应的 Content-Type 应为text/plain 以将数据返回给事件处理程序,包括返回 JSON 对象。任何其他内容类型都将被视为错误。 e.response.data() 应该是 e.response.data,因为响应应该是一个对象。要从控制器返回包含data 属性的对象,代码应为return Json(new data = text , "text/plain");【参考方案2】:

如果你只是传回一个字符串,你应该可以这样做:

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;

【讨论】:

我们只需要返回文本/纯文本。我们可以发送其他格式,如 html 或 xhtml【参考方案3】:

我将在此处将我的答案与其他有效答案一起添加。首先,尽管您希望在成功函数而不是完整函数中获得返回的响应:

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

on success 函数返回一个对象(通常人们将其命名为 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
    

我的 console.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 在 e.response 中返回我的新 ID HttpStatusCode.Ok 返回我的状态 200。如果您检查响应,还会返回许多其他数据。

请注意,要使用 HttpResponseMessage 和 HttpStatuseCode,您需要在类中包含以下命名空间:

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

【讨论】:

以上是关于如何获取剑道上传成功或完成函数返回的值的主要内容,如果未能解决你的问题,请参考以下文章

我如何从 mvc 的剑道 ui 网格的下拉列表中获取选定的值

如何访问剑道网格页脚模板值

如何获取第一个成功完成的 Future?

JS如何获取值

如何根据剑道网格中的特定列条件更改行的颜色以获取角度

执行sql操作后如何获取其返回值