好的上传者删除自定义错误消息不会回来

fine uploader delete custom error message not coming back

我无法从我的文件删除处理程序中获取自定义错误消息。我不确定,但看起来删除与上传的处理方式不同。

来自文档:

You may return any response you like, as the XMLHttpRequest object will be passed to your onDeleteComplete handler for further examination. However, the response code you return is important to Fine Uploader, as it uses this to determine if the delete has succeeded or not. The following response codes indicate success for this specific request: 200, 202, and 204. Any other response code indicates a failure.

在我的删除服务器处理程序中,我有这个来捕获错误并将响应发送回 FineUploader。

catch (Exception ex)
{
    //const string json = "{\"success\":false}";
    const string json = "{\"success\":false,\"error\":\"THIS IS THE ERROR\"}";
    //const string json = "{\"error\":\" HERE IS THE ERROR! \"}";
    var response = (Response)json;
    response.ContentType = "text/plain";
    //response.StatusCode = HttpStatusCode.InternalServerError; 
    return response;
}

我试过发回 {"success":false} 和错误,只是 {"success":false} 和错误。我检查过 json 是否有效。 然而它似乎什么都不做。 FineUploader 最重要的是 response.StatusCode。如果我发送失败响应代码,则 FineUploader 会识别错误并显示该代码的消息。它还在 errorReason 中返回 onError 回调。

如果我不设置响应状态代码,它默认为 OK,不会引发错误。

我查看了 php 的示例代码并在删除处理程序中看到了这个:

if (is_dir($target)){
    $this->removeDir($target);
    return array("success" => true, "uuid" => $uuid);
} else {
    return array("success" => false,
        "error" => "File not found! Unable to delete.".$url,
        "path" => $uuid
    );
}

显然,该代码正在发回 "success":fail 和自定义错误消息。 但是我无法在该代码中计算出发送回的响应状态。

更新 1:这是客户端上处理服务器响应的 js:

callbacks: {
    onError: function(id, name, errorReason, xhrOrXdr) {
        alert(qq.format("Error on file number {} - {}.  Reason: {}", id, name, errorReason));
        console.log(errorReason);
}

那么,我做错了什么吗?

更新 2:

好的,我已经查看了 onDeleteComplete,我的客户端代码现在如下所示:

 callbacks: {
    onDeleteComplete: function(id, xhr, isError) {
        alert("onDeleteComplete => id is:" + id + " Is error?:" + isError);
    },
    onError: function(id, name, errorReason, xhrOrXdr) {
        alert(qq.format("onError => Error on file number {} - {}.  Reason: {}", id, name, errorReason));
        console.log(errorReason);
    },

现在,当我在浏览器中删除文件时,我首先收到 onError 警报,然后是 onDeleteComplete。在这两种情况下,我都找不到任何方法来显示我想从我的服务器处理程序发回的错误消息。 onError 似乎总是只显示 HttpStatus 错误消息,而不是我的 json 响应中定义的错误消息。 onDeleteComplete 没有返回错误的参数。

我不确定是不是我一个人的问题,但我发现这令人困惑且前后矛盾。

对于上传,您可以这样做:

failedUploadTextDisplay: {
        mode: "custom",
        responseProperty: "errorMessage"
    },

这意味着您的服务器可以发回自定义响应错误,如果出现错误,该错误将显示在文件下方。

所以我的 C# Nancy 服务器代码在出错时执行此操作:

catch (Exception ex)
            {
                FormResponse.success = false;
                FormResponse.errorMessage = ex.Message;
                return Response.AsJson(FormResponse).WithStatusCode(HttpStatusCode.BadRequest);
            }

这发回 json 看起来像这样:

{"errorMessage":"A file with that name already exists and cannot be overwritten!","success":false}

FineUploader 然后在文件下显示如下消息:

太棒了。但是对于文件删除,我找不到这样的功能。

所以对于意外的删除失败,我将不得不找到一个解决方法:

我有 onDeleteComplete 回调,我认为它可以用来获取错误:

onDeleteComplete: function(id, xhr, isError) {
            if (isError) {
                console.log("Error in delete!!");
                if (typeof xhrOrXdr != 'undefined' && xhrOrXdr != null) {
                    console.log("resp text=" + xhrOrXdr.responseText);
                    var t = JSON.parse(xhrOrXdr.responseText);
                    console.log(t['errorMessage']);

                }
            }

但这不起作用,因为当 isError = true 时 xhr 对象为空。 所以没办法得到onDeleteComplete的错误。

如果FineUploader有这样的功能就好了:

failedDeleteTextDisplay: {
mode: "custom",
responseProperty: "errorMessage"

},

但事实并非如此。所以看起来我必须处理 OnError 回调中的删除错误。但是因为我不知道它是哪种动作。删除或上传,然后我将不得不在 json 中发送另一个参数来处理切换,因为我只需要更改删除失败的默认错误消息。

所以,我现在的最终解决方法是这样。 onError 处理程序处理删除和上传错误。我的服务器现在在 json 中发回另一个名为 'actionType' 的参数。这可以是 'delete' 或 'upload'。如果是删除操作错误,那么某些 jquery 会隐藏默认错误消息并显示新错误消息。

onError: function(id, name, errorReason, xhrOrXdr) {
            if (typeof xhrOrXdr != 'undefined' && xhrOrXdr != null) {
                var t = JSON.parse(xhrOrXdr.responseText);

                // if the error was result of delete then show the custom                     message on the panel
                if (t["actionType"] === "delete") {
                    $("#CustomError").html("Delete failed: " +  t["errorMessage"] );
                    $("#ErrorContainer").hide();

                }

            }
        },

更新: 嗯,这很尴尬。我将其作为错误提出,结果证明是我的代码有问题。这是对 javascript 陷阱的示范和提醒。我已经查看这段代码一段时间了:

onDeleteComplete: function(id, xhr, isError) {
            if (isError) {
                console.log("Error in delete!!");
                if (typeof xhrOrXdr != 'undefined' && xhrOrXdr != null) {

Ray 在查看我的错误报告时才发现一个明显的错误。 我的函数变量被称为 xhr,但我的代码正在寻找 xhrOrXdr。 我只是没有看到它。由于它是 javascript,因此控制台中没有任何投诉。我习惯于使用 Resharper 在 C# 中编码,而这种事情是不可能的。 Resharper 或 VS intellisense 都无法警告我。

所以这个错误是我的错误,onDelete 回调按照描述的方式工作。

这是一个学习过程..