2017-01-24 14 views
0

jquery/ajaxスクリプトを作成しようとしています。目的は、データベースからデータを取得し、successFuncの結果を比較し、次のajax呼び出しをmvc actionResultに実行し、結果に応じてビューをレンダリングすることです。何らかの理由でそれが機能していません。Ajax呼び出しが失敗しています

function GetPageData() { 
$.ajax({ 
    type: "Post", 
    url: '/Track/GetPageData', 
    dataType: "json", 
    data: param = "", 
    success: successFunc, 
    error: errorFunc 
}); 
function successFunc(data, status) { 
    alert('data; '+data+', '+'status: '+status); 
    if (data == 'contact') { 
     $.ajax({ 
      type: "Post", 
      url: '/Track/Contact', 
      dataType: 'json', 
      success: successF, 
      error: errorF 
     }); 
     function successF() { 
      alert('services') 
     } 
     function errorF() { 
      alert('servicesFail') 
     } 
    } 

ActionResults方法の一つ:

public ActionResult Contact() 
    { 
     return View(); 
    } 

私はその呼び出しを見ることができますデバッグ中(のActionResult連絡先に行われている)が、それはビューをレンダリングしません。なぜコードが動作していないのでしょうか?

+4

いただきありがとうございます。 'dataType: 'json''が指定されているので、あなたは' 500 Internal Server Error'を取得していますが、あなたはメソッドがhtmlを返します( 'dataType:' html 'でなければなりません。 Ajax関数が働きます) –

+4

基本的に、JSONをリクエストすると、サーバーアクションメソッドはJSON文字列を返す必要があります。全体のビューを返すことは、JSONでAjaxを使用することの全ポイント(データ転送を小さく保つこと)に逆行します。 –

+0

@Stephen Muecke私はこのようなコードでHttpRequest '/ Track/Contact'を作成し、目的のビューをレンダリングします。それは私が期待したものですが、うまくいきません。 – Zet

答えて

0

最初のajax呼び出し後にGetPageData関数を終了していません。それは以下のように書き留めてチェック -

function GetPageData() { 
    debugger; 
    $.ajax({ 
     type: "Post", 
     url: '/Track/GetPageData', 
     dataType: "json", 
     data: param = "", 
     success: successFunc, 
     error: errorFunc 
    }); 
} 
    function successFunc(data, status) { 
      $.ajax({ 
       type: "Post", 
       url: '/Track/Contact', 
       dataType: 'json', 
       success: successF, 
       error: errorF 
      }); 

    } 
    function successF() { 
     alert('services'); 
    } 
    function errorF() { 
     alert('servicesFail'); 
    } 
    function errorFunc() { 
     alert('servicesFail'); 
    } 
1

ビューを得るためにあなたのAJAX呼び出しは、以下のパターンに従ってください、これは私がパスワードリセットのために使用するものである:

$.ajax({ 
     url: '@Url.Action("ActionName","ControllerName")', 
     cache: false, 
     data: { userId: userId, newPassword: password }, 
     type: 'GET', 
     success: function (data) {       
      $('#unlockResult').html(data); 
     }, 
    }); 

アクションは次のようになりますそしてPartialViewを返します。

public async Task<ActionResult> UnlockUserAccount(string userId, string newPassword) 
    { 
    //other stuff here 
    return PartialView("_AjaxResponse"); 
} 

AJAX呼び出しのsuccess一部でdataパラメータは番目です電子HTML PartialViewのために、これは、私がページを持っているdiv要素の中に注入されています。私のシナリオでは

<div id="unlockResult"></div> 

は、PartialViewは、既存のページに追加されたHTMLに失敗/成功のビットを返します。コメントの中で述べたように、完全に新しいページを読み込もうとするなら、ajaxを使いたくないです。私は私のために機能するソリューションを使用終わり

0

function GetPageData() { 
$.ajax({ 
    type: "Post", 
    url: '/Track/GetPageData', 
    dataType: "json", 
    data: param = "", 
    success: successFunc, 
    error: errorFunc 
}); 
function successFunc(data, status) { 
    alert('data; '+data+', '+'status: '+status); 
    if (data == 'services') { 
     window.location = "/Track/Services"; 
    } 
    else if (data == 'contact') { 
     window.location = "/Track/Contact"; 
    } 
    else{ 
     window.location = "/Track/About"; 
    } 
} 

をあなたは仕事とどのようなエラーメッセージがあなたの取得されていないものを説明していないあなたの助け

+0

AJAXの全目的は同じページにとどまることです。 ajaxを使い、 'window.location'を使ってリダイレクトをするのはナンセンスです。 –

関連する問題