2015-01-05 85 views
5

javascriptからコントローラメソッドを呼び出そうとしていますが、これを正しく実行するには問題があるようです。私は非常にjavascriptでの経験はほとんどありませんし、stackoverflowからこれを行う方法の他の例に従っていますが、私はまだいくつかの問題を抱えています。JavascriptエラーからASP.NET MVC 5呼び出しコントローラメソッド

基本的には、javascriptオブジェクトの.dataタグを、コントローラのメソッドから返された文字列に設定します(このメソッドは、SQL Server関数を実行するWebサービスを呼び出します)。このメソッドは、関数で使用される1つのパラメータを渡す必要があります。

コードは以下である:

JavaScriptコード

for (var i = 0; i < stats.length; i++) 
{ 
    var stat = stats[i].data('id'); 
    var color = CallService(stat); 
    this.node.fill = color; 
} 

jQueryの方法

function CallService(id) { 
    $.ajax({ 
     url: '@Url.Action("CallService", "NodeController")', 
     type: 'GET', 
     dataType: 'json', 
     cache: false, 
     data: { 'id': id }, 
     success: function (color) { 
      return color; 
     }, 
     error: function() { 
      alert('Error occured'); 
     } 
    }); 
} 

コントローラメソッド

[HttpGet] 
    public JsonResult CallService(string id) 
    { 
     var idNum = Convert.ToInt32(id); 
     var StationService = new getStationStatus.Service1SoapClient("Service1Soap"); 
     string color = StationService.getStationStatus(idNum); 
     return Json(color, JsonRequestBehavior.AllowGet); 
    } 

コントローラはNodeControllerと呼ばれ、私はurl:ajaxの呼び出しを参照しています。

基本的に何が起こっているのですか?ページを実行すると、最初にthis.node.fillをnull値に設定できないというエラーが表示されますTHEN私はエラーが発生しました。私はJQueryからエラーメッセージを受け取る前にthis.node.fillでエラーが発生した場合、メソッドが正しい順序で呼び出されているかどうかは正直言ってもわかりません。

すべてのヘルプまたは提案は大変ありがとうございます。

+1

基本コントローラの名前とコントローラを書くために必要はありません:あなたは(成功 'のように:')コールバック関数の途中から値を返すことができないが、長い起こるようにあなたの機能が終了した後。 @Igorは以下のいくつかの正しい提案をしています。 –

答えて

5
  1. あなたのコントローラクラスがNodeControllerある場合は、Url.Actionでコントローラ名のための唯一の「ノード」を使用します。

    url: '@Url.Action("CallService", "Node")', 
    
  2. あなたが同期、非同期関数から値を返すことはできません。成功または使用jqueryの約束を呼び出すことがCallServiceにコールバックを渡すのいずれか - http://api.jquery.com/promise/

  3. 我々はthis.node.fillがあるか、それが定義されている場所がわかりません。おそらく、割り当てが実行される時点でthis.nodeは定義されていません。

+0

ありがとう!私はすべてのヒントを使用するだけでなく、投稿から投稿へのタイプを切り替える必要がありました – jhinx

2

あなたがコーディングエラー非同期

@Url.Action("CallService", "Node") 
+0

私はそれを試しても問題は解決しませんでした - 私は同じ注文で同じエラーが表示されています – jhinx

+0

あなたは "非同期関数の真中から値を返す "problem :) –

関連する問題