2

私は自分のアプリケーションでサーバー側に多くのjqueryajax呼び出しを使用する傾向があります。

通常、サーバー側で問題が発生すると、エラーメッセージがシリアル化され、応答(JSON)として送信されます。に似たもの

 { "ErrorMessage" : "Something went wrong: " + ex.message }

error私が知りたいのは、エラーを.ではなくjqueryajaxコールバックで終わらせる方法があるかどうかですsuccess

これを行う方法はありますか?それとも、エラーを処理する古い方法に固執する必要がありますか?PHPまたはASP.NET+c#の例を提供するかどうかは関係ありません。これは、両方に関心があるためです。ありがとう

4

2 に答える 2

3

error callbackそれらをjQueryで終了させることができます。ASP.NETcustom errorsでは、web.configのセクションを変更するだけですが、このルートを使用する場合は、Webサービスを別のフォルダーに配置して、Webサービスに対してのみ実行するようにしてください。サイト全体でこれをオフにせずに呼び出します。例えば:<customErrors mode="Off" />

<location Path="/Services"> <!--Your web service lives here -->
    <system.web>
        <customErrors mode="Off" />
    </system.web>
</location>

このように、Webメソッドでスローされた例外はerror callback、jQueryで処理されます。

Webメソッドに例外をキャッシュせずに例外を伝播させるか、例外をキャッチしてより「ユーザーフレンドリー」なメッセージを再スローすることができます。

于 2012-05-14T19:34:32.160 に答える
0

これはDeferred、jQuery1.5以降のオブジェクトを使用して可能です。ベンネーデルはそれについていくつかの例を持っています、あなたはここhttp://www.bennadel.com/blog/2255-Using-jQuery-s-Pipe-Method-To-Change-Deferred-Resolution.htmとここhttpを見ることができます://www.bennadel.com/blog/2123-Using-Deferred-Objects-In-jQuery-1-5-To-Normalize-API-Responses.htm

これがJavaScriptコードの簡略版です

var request = $.ajax({
    type: "post",
    url: "./web_service.cfm",
    dataType: "json"
});

request = request.pipe(

    // Filter the SUCCESS responses from the API.
    function (response) {

        // real success
        if (response.success) {
            return (response);
        }
        else {
            // The response is actually a FAIL even though it
            // came through as a success (200). Convert this
            // promise resolution to a FAIL.
            return (
                $.Deferred().reject(response)
            );
        }
    },

    // Filter the FAIL responses from the API.
    function (response) {
        return ({
            success: false,
            data: null,
            errors: ["Unexpected error: " + response.status + " " + response.statusText]
        });

    }

);


// Now that our API response has been filtered, let's attach
// our success and fail handlers to the promise resolution.
request.then(

    function (response) {
        console.log("Success!!!", response);
    },

    function (response) {
        console.log("Fail!!!", response);
    }

);
于 2012-05-14T19:44:19.013 に答える