2013-06-18 14 views
5

特定のボタンをクリックした後にAjaxコールを起動するためにjQueryを使用しようとしています。私は遭遇する可能性のある構文と問題のいくつかの例を読んだが、私の目的のために働く解決策を見つけることに失敗した。ここにコードがあります。jQuery AjaxがMVC 4コントローラメソッドの呼び出しに失敗しました

コントローラ方法:(HomeController.cs)

​​

のjQueryコード:

function changeCompany(company) { 
    $.ajax({ 
     url: '@Url.Action("ChangeCompany", "Home")', 
     type: 'POST', 
     data: JSON.stringify({ companyCode: company }), 

     success: function (data) { 
      alert("Company: " + data); 
     }, 
     error: function (req, status, error) { 
      alert("R: " + req + " S: " + status + " E: " + error); 
     } 
    }); 
} 

そして最後に、私はこの関数を呼んでいる:

$('.companyButton').click(function() { 
    compCode = $(this).text(); 
    debug("Click event --> " + $(this).text()); 
    changeCompany(compCode); 
}); 

私のデバッグメッセージ正しく表示され、Ajaxコールは常に次のアラートで失敗します。R: [object Object] S: error E: Not Found

私はそれをどうしたらいいのか分かりません。

このトピックに関するいくつかの質問がありますが、いずれも私の問題を解決していないようで、これらのコードブロックに何が問題なのか正直には分かりません。どんな洞察にも感謝します。

編集: これは注目に値する場合は、これはモバイルデバイス向けです。 Windows 8 Phone Emulator(Internet Explorer)とjQuery Mobileのテスト。それがすべて

EDIT 2でアヤックスに影響を与える場合、わからない:生のネットワーク呼び出しを見てとった後 、'Url.Action("ChangeCompany", "Home")'が適切なURLに変換されていないと、それは、生のURLであるかのように代わりに直接呼び出されているようですテキスト。これは時代遅れのjQueryやその他の要因によるものですか?

+0

あなたのコントローラアクションメソッドはどのように見えますか?また、あなたのブラウザのdevツールで生のネットワーク通話を見て、通話が何であるかを正確に確認してください。トラブルシューティングに役立ちます。 –

+0

サーバー側のエラーだと思います。 Chromeのデベロッパーツールバーのネットワークセクションで、リクエストをクリックすると、プレビュータブでレスポンスを確認できます。 –

+0

ブラウザでソースを見ると、URLは正しく見えますか?また、エラー関数の中に 'debugger;'を設定した場合は、パラメータを詳しく見てください。 –

答えて

6

あなたのEDIT2で別のJavaScriptファイルにurl: '@Url.Action("ChangeCompany", "Home")',を使用しているようです。あなたは.cshtmlファイルの中にのみひげコードを書き込むことができ、それは.jsファイル内では動作しません。

+0

ああ、意味があります。なぜ私は私がビューの外でそれを使用できると思ったか分かりません。 – DrBowe

+0

URLがAjaxコールにハードコードされていますが、これは正常に動作します。 – DrBowe

+0

.cshtmlに変数を作成し、その変数を.jsファイルにアクセスすることができます –

1

AJAXコールで重要なパラメータがいくつかありません。あなたのAJAX呼び出しは以下のように変更します。

function changeCompany(company) { 
    $.ajax({ 
       url: '@Url.Action("ChangeCompany", "Home")', 
       type: 'POST', 
       data: JSON.stringify({ companyCode: company }), 
       success: function (data) { 
         alert("Company: " + data); 
         }, 
      error: function (req, status, error) { 
         alert("R: " + req + " S: " + status + " E: " + error); 
         } 
      });} 

あなたは、あなたのコントローラメソッドは、以下のよう[HttpPost]属性で注釈を付けることができます。

[HttpPost] 
public JsonResult ChangeCompany(string companyCode) 
{ 
    return Json(new { result = companyCode }, JsonRequestBehavior.AllowGet); 
} 
+0

私は以下のことをして、同じエラーアラートを受け取りました。問題が何であるかはわかりません。 – DrBowe

0

あなたの行動はcompanyCodeを直接返さないことに注意してください。また、この

success: function (data) 
    { 
    alert("Company: " + data.result); 
    } 

を:あなたはそのため あなたの成功の機能で必要になるような結果を表示するためにJSON resultプロパティに割り当てているE: Not Foundはあなたには、いくつかのルーティングの問題を有することができることを私に伝えます。 ChangeCompanyアクション内にブレークポイントを設定した場合は、ヒットしていますか?