0

ファイルの削除ハンドラからカスタムエラーメッセージが返ってきています。私は確信していませんが、それは削除がアップロードとは異なる方法で処理されるようです。ドキュメントから詳細アップローダの削除カスタムエラーメッセージが返されない

:削除のための私のサーバーハンドラで

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にとって重要なのはレスポンスです。ステータスコード。失敗した応答コードを送信すると、FineUploaderはエラーを認識し、そのコードのメッセージを表示します。また、errorReasononErrorコールバックに戻ってきます。

応答ステータスコードを設定しないと、デフォルトで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:

[OK]を、私は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は、常に私のjsonレスポンスで定義されたエラーメッセージではなく、HttpStatusエラーメッセージを表示するようです。 onDeleteCompleteにはエラーを戻すパラメータはありません。

+0

..学習プロセスです。あなたの質問にあなたの実際のonDeleteCompleteハンドラを含めてください。 –

+0

私はOnErrorのJavaScriptを追加しました。しかし、あなたのコメントは私がonDeleteCompleteのエラーを処理する必要があり、onErrorコールバックを処理するべきではない可能性があることを認識させてくれます。 onErrorが呼び出され、onDeleteCompleteが削除の成功時にのみ呼び出されることは論理的なようです。私はないと思いますか? –

+1

ドキュメンテーションが述べるように、削除操作が完了すると 'onDeleteComplete'コールバックが呼び出されます。成功すると厳密に呼び出された場合、それは 'onDeleteSuccess'と呼ばれます。この動作は、 'onComplete'コールバックなど、APIの残りの部分と一貫しています。 –

答えて

0

私はそれが私のものかどうかわかりませんが、私はこれが混乱し、矛盾していることがわかりました。

アップロードのためには、これを行うことができます。これが何を意味するのか

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

は、サーバーは、カスタム応答エラーを送り返すことができることであり、これは、エラーが発生した場合には、ファイルの下に表示されます。

だから私のC#のナンシー・サーバ・コードがエラーでこれを行います。これは、このようになりますJSONを送り返し

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

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

FineUploaderは、このようなファイルの下に次のメッセージが表示されます

素晴らしいです

enter image description here

。しかし、ファイルの削除のために私が見つけることができるそのような機能はありません。なぜならとき

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

       } 
      } 

しかし、これは動作しません:

は、だから私は、回避策を見つける必要があります予期しない削除の故障のために:

私はエラーを取得するために使用できると想定onDeleteCompleteコールバックを持っていますisError = true xhrオブジェクトがnullです。 したがって、onDeleteCompleteでエラーを取得する方法はありません。

FineUploaderはこのようなものだった場合、それはいいだろう:

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

}、

をしかし、それはしません。だから私はOnErrorコールバックの削除エラーを処理する必要があるように見えます。しかし、私はそれがどのような行動であるかわからないので。削除またはアップロードすると、失敗した削除のデフォルトのエラーメッセージを変更するだけで済むため、スイッチを処理するためにjsonで別のパラメータを返す必要があります。

私の最終的な回避策はこれです。 onErrorハンドラは、削除エラーとアップロードエラーの両方を処理します。私のサーバーは今、 'actionType'と呼ばれるjsonの別のパラメータを返送します。これは、「削除」または「アップロード」のいずれかです。それが削除アクションエラーの場合、いくつかの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の落とし穴についてのデモンストレーションと私に思い出させるものです。 ID」はしばらくの間、このコードを見て:

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

それは、レイは、彼は明らかに誤りを見つけたというのが私のバグレポートを見たときだけでした。 私の関数変数はxhrでしたが、私のコードはxhrOrXdrを探していました。 私はそれを見たことがありませんでした。それはjavascriptなので、コンソールに苦情はありませんでした。私はResharperでC#でコーディングするのに慣れていますが、そのようなことは不可能です。 ResharperもVS Intellisenseも私に警告することはできませんでした。

したがってバグは私のバグで、onDeleteコールバックは説明どおりに機能します。

それはあなたが投稿「ハンドラは」JavaScriptのようなものを見ていない

+0

変更や新機能をリクエストしているようです。これをライブラリに取り込む最善の方法は、コードを変更してプルリクエストを開くことです。失敗した場合、githubリポジトリで機能要求を開くことが順調です。 –

+0

ありがとうRay。私は何ができるかを見ていきます。私の答えを最終的な回避策の解決策で更新しました。 –

+0

"isError = trueの場合、xhrオブジェクトはnullです"これは私のバグのようです。あなたがファイルを提出すれば、私はそれをさらに調べるでしょう。 –

関連する問題