2017-09-07 12 views
0

私のASP.Net Web Api 2アプリケーションでは、送信ボタンをクリックしたときにAJAX投稿を使用して登録フォームデータをサーバーに送信しています。Web Api 2でAjax成功イベントが発生しない

function click_form() { 
var formData = JSON.stringify({ 
    Name: $('#regInputName').val(), 
    SecondName: $('#regInputLastName').val(), 
    Email: $('#regInputEmail').val(), 
    Username: $('#regInputUsername').val(), 
    Password: $('#regInputPassword').val(), 
    Contact: $('#regInputContact').val(), 
}); 

$.ajax({ 
    url: '/api/Account/registration', 
    method: 'POST', 
    data: formData, 
    contentType: 'application/json;charset=utf-8', 
    dataType: 'json', 
    cache: false, 
    success: function() { 
     alert("Success"); 
    }, 
    error: function() { 
     alter('Error'); 
    } 
}); 
} 

そして、ここでユーザー名がすでに存在する場合は自分のユーザー名が存在しない場合、私はHttpStatusCode.OKをretundウェブアピコントローラ、およびHttpStatusCode.NotFoundです。

[HttpPost] 
[Route("api/Account/registration")] 
    public HttpResponseMessage registration([FromBody] UserRegModel user) 
    {    
     if (!usernames[0].Contains(user.Username)) 
     { 
      User u = new User(){/*....*/} 
      /*... updating database ... */ 

      HttpContext.Current.Session["user"] = u;   
      return new HttpResponseMessage(HttpStatusCode.OK); 
     } 
     return new HttpResponseMessage(HttpStatusCode.NotFound); 
    } 

マイコントローラは、OKまたはNotFoundを返すたびにAjaxイベントの成功とエラーを返すことはありません。

誰かが問題を認識していますか?

+0

エラーハンドラに入力ミスがあります。「警告」は「変更」ではありません。 –

+0

あなたは正しいですが、これは私の問題を解決するものではありません。 – Bleki95

+0

あなたのコンソールには何が表示されますか?何かエラーがありますか?通話はブロックされていますか? –

答えて

0

ほとんどの場合、usernamesのリスト/アレイには、転記された値が含まれていません。 これにより、404ステータスコードが生成されます。これは、ajaxセットアップのエラーコールバックによって処理されます。

しかし、エラーコールバックではalter()alert()であるべきtypeoがあり、それを変更すると、エラーメッセージが表示される可能性が最も高いです。

0

私が見つけたいくつかの問題 -

  • 使用type: 'POST'代わりmethod: 'POST'
  • の対処方法は、任意のものを返さない場合、あなたはdataType: 'json'は必要ありません。それ以外の場合は、エラー関数が成功の代わりに呼び出されます。

修正:

<button type="button" onclick="click_form()">Post Form via Ajax</button> 
<script src="~/Scripts/jquery-1.10.2.min.js"></script> 
<script> 
    function click_form() { 
     var formData = JSON.stringify({ 
      Name: 'John Doe', 
      SecondName: 'Jonny', 
      Email: '[email protected]', 
      Username: 'johndoe', 
      Password: '123456', 
      Contact: 'Jannet Doe' 
     }); 

     $.ajax({ 
      url: '/api/Account/registration', 
      type: 'POST', 
      data: formData, 
      contentType: 'application/json;charset=utf-8',  
      cache: false, 
      success: function (result) { 
       console.log(result); 
      }, 
      error: function (result) { 
       console.log(result); 
      } 
     }); 
    } 
</script> 

は、Web API 2を使用する場合は、あなたがOk()NotFound()を使用し、IHttpActionResultを返すことができます。それは古いアプローチよりもずっときれいで読みやすい。

FYI
[HttpPost] 
[Route("api/Account/registration")] 
public IHttpActionResult Registration([FromBody] UserRegModel user) 
{ 
    if (!usernames[0].Contains(user.Username)) 
    { 
     ... 
     return Ok(); 
    } 
    return NotFound(); 
} 

私は上記のコードをテストし、それが正常に動作します。したがって、複雑なビジネスロジックを実行する前に、Ok()を返してAjaxが動作することを確認してください。

関連する問題