-1

ASP.Net MVC Web API コントローラーにデータを POST しようとしていて、応答でそれを取得しようとしています。投稿用に次のスクリプトがあります。

 $('#recordUser').click(function () {
  $.ajax({
    type: 'POST',
    url: 'api/RecordUser',
    data: $("#recordUserForm").serialize(),
    dataType: 'json',
    success: function (useremail) {
        console.log(useremail);
    },
    error: function (xhr, status, err) {

    },
    complete: function (xhr, status) {
        if (status === 'error' || !xhr.responseText) {
            alert("Error");
        }
        else {
            var data = xhr.responseText;
            alert(data);
            //...
        }
    }
 });
});

このスクリプトの問題は、データを投稿しようとすると、jQuery が「成功」ではなく「エラー」を返すことです。

コントローラーに問題がないことを確認しました。リクエストが行われるたびにデバッグ モードで API メソッドに入ることができ、POST リクエストからデータを取得し、それを返していることがわかります。このコントローラーは非常に単純です。

 public class RecordUserController : ApiController
 {
     public RecordUserEmailDTO Post(RecordUserEmailDTO userEmail)
     {
         return userEmail;
     }
 }

jQuery で有用なエラー メッセージを出力する方法がわかりません。現在、Chrome コンソールを使用して jQuery コードをデバッグしようとすると、空の xhr.responseText が表示され、"err" オブジェクトには何も表示されず、"status" が "error" に設定されていますが、これはあまり役に立ちません。

もう 1 つ試したことは、次のコードをコンソールから直接実行することです。

$.ajax({
    type: 'POST',
    url: 'api/RecordUser',
    data: {"Email":"email@address.com"},
    dataType: 'json',
    success: function (useremail) {
        console.log(useremail);
    },
    error: function (xhr, status, err) {
        console.log(xhr);
        console.log(err);
        console.log(status);
        alert(err.Message);
    },
    complete: function (xhr, status) {
        if (status === 'error' || !xhr.responseText) {
            alert("Error");
        }
        else {
            var data = xhr.responseText;
            alert(data);
        }
    }
});

つまり、実際にボタンをクリックしてフォームを送信することなく、同じスクリプトを使用します。驚いたことに、これは正しい応答で返され、コンソールにデータが出力されているのを確認できます。私にとってこれは、Web APIコントローラーが正常に動作していることを意味しますが、ボタンのクリックやフォームの送信で動作せず、「成功」ではなく「エラー」になる理由についての手がかりがありません。

私は自分のアプローチでエラーを見つけることができませんでした。フォームが投稿されたときに誰かが応答を返すのを手伝ってくれたらうれしいです.

4

1 に答える 1

-1

Alnitak が提案したように、私はcompleteコールバックsuccesserrorものを使用していました。complete私のコードから削除すると、問題が修正されました。

Alnitak に感謝します。

于 2013-07-13T00:51:37.767 に答える