2012-02-19 8 views
-1

によって非文字列を返すWebメソッドを呼び出す私はそれは私がこのWEBMETHODを呼び出そうとしましたAJAX [ASP.net]

[WebMethod(EnableSession = false)] 
public static List<string> test() 
{ 
    List<string> a = new List <string>() ; 
    a.Add("1s"); 
    a.Add("2s"); 
    return a; 
} 

をテストするための簡単なリストを返しますtestと呼ばれるC#ファイル内のWeb機能を作りました

 function Test() { 

      $.ajax({ 
       type: "POST", 
       url: "Default.aspx/test", 
       data: "", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (msg) { 
        x = msg; 
        $(".resultbox").html(msg.d); 
       } 
      }); 

      return x; 

} 

iはテスト呼び出しjqueryのAJAXを使用して、フロントエンドから();コンソールからのメッセージでした:

Uncaught Error: NOT_FOUND_ERR: DOM Exception 8 jquery-1.6.1.min.js:18 

私はJSONにオブジェクトを変換し、それらを返すと、これは通常動作しますが、私は、オブジェクトをフロントエンドにWebMethod属性から返される方法を知って興味がある一般的なケースでは、彼らが連載されていますテキストに、なぜこのエラーが起こったのですか?

+1

返品時にポイントがありません。 xはコールバックの前に起動されるため、おそらくnullになります。 – naveen

+0

私はグローバル変数としてxを定義しました。答えの範囲でもありません。 –

+1

コールバックメソッドとグローバルスコープについて議論し、後でグローバルスコープ変数を返すのはなぜですか。 :) – naveen

答えて

-2

WebMethodから文字列のリストを送信しているので、msgは配列になります。その場合msg.dundefinedの結果を出すでしょう。コンマで区切った文字列として表示したい場合は、これを試してみてください。

ajaxは、デフォルトでは非同期ですので、Testメソッドからのajax応答を返すことはできません。それを返す場合はasyncfalseに設定し、応答が来るまで待ってから返すことができます。

function Test() { 
      var x = null;//Define variable x 
      $.ajax({ 
       type: "POST", 
       async: false, 
       url: "webservice.asmx/test",//Web service url 
       data: "", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (msg) { 
        x = msg; 
        $(".resultbox").html(msg.join(',')); 
       } 
      }); 

      return x; 
} 
+2

その完全に有効です。そのページメソッド! http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/ – naveen

+0

ページメソッドは、フロントエンドから有効なトークンですが、実際はそうであるように設計されています。しかし、これは私が質問 –

+0

@ HadyElsaharに投稿した問題ではありません - 私の編集された答えを試してみてください。それがあなたを助けることを願ってください。 – ShankarSangoli

1

これを試してください。

function Test() { 

    $.ajax({ 
     type: "POST", 
     url: "Default.aspx/test", 
     data: "", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      msg = msg.hasOwnProperty("d") ? msg.d : msg; 
      $.each(msg, function (index, value) { 
       $(".resultbox").append("<p>" + value + "</p>"); 
      }); 
     } 
    }); 

} 
+0

+1 hasOwnProperty()をもっと使う必要があります。 –

+0

実際には、質問が何を得ていないのですか、私はJqueryからWebメソッドを呼び出す際に問題はありません。別のInqueryを持っていました。 –

+0

@HadyElsahar:あなたはちょうど始めていることを理解したらJavaScriptを学ぶ。私たちを信じて。 :) – naveen

1

私は、DOM例外はjQueryのhtml()メソッドを介して、innerHTML()に配列オブジェクトを渡すことに関係していると信じています。最初の代わりに文字列として、あなたの配列値をフォーマットしてみてください。

success: function (msg) { 
    // Builds a string like '1s, 2s' 
    var formattedMessage = msg.d.join(', '); 

    $(".resultbox").html(formattedMessage); 
} 

が手動でフォーマットされた文字列を構築することはもちろん、何の楽しみではありません。そのような状況を改善するには、jQueryテンプレートとその後継JsRenderのようなクライアントサイドのテンプレートソリューションを調べてください。

+0

からurの答えは、私はWEBMETHODリストを返しますフロントエンドJSarrayには、それは本当ですか?他のオブジェクトはどうですか?それは質問の中核だった –

+2

リストまたは配列のようなコレクションはJavaScript配列になります。オブジェクトはJavaScriptのキーと値のペアになります。スカラー値は、対応するJavaScriptタイプにマップされます。 –