2012-04-03 16 views
0

jquery/ajaxを使用してコードビハインドページからWebメソッドを呼び出すことで更新したいリストボックスがあります。リストボックスには、ログインしているすべてのユーザーが表示されます(ログインに成功すると、グローバルリストに追加されます)。私は明らかにフルページのリフレッシュを使用して更新するリストボックスを得ることができますが、これは美的には満足できません。私は2つの問題があります。jquery/ajax/webmethodを使用してリストボックスを更新する

  1. 私はChromeでアプリケーションを実行し、開発ツールを使ってネットワークの動作をチェックすると、呼び出されているWebメソッドが表示されません。私は(私が見ることができる)他のwebmethodsが発射されている/期待どおりに実行されている。

  2. 私が見つけた例に基づいてスクリプトを書いたので、(私が(a)リストからデータを正しく取得していれば、私は比較的新しいです。表示されるユーザー名)と(b)リストボックスに正しく追加します。ここ

は、WebMethod属性です:

[WebMethod()] 
    public static string[] getCurrentList() 
    { 
     int count = 0; 
     for(int i = 0; i < Global.ListUsers.Count(); i++) 
      count++; 

     string[] results = new string[count]; 

     for (int i = 0; i < count; i++) 
     { 
      results[i] = Global.ListUsers[i].Username.ToString();**//edited...** 
     }            

     return results; 
    } 

とスクリプト:

$(function updateListbox() { 
var lBox = $('select[id$=ListBox1]'); 
setInterval(function() { 
    $.ajax({ 
     beforeSend: function (req) { 
      req.setRequestHeader("Accept", "application/json"); 
     }, 
     type: "POST", 
     url: "Homepage.aspx/getCurrentList", 
     data: "json=" + JSON.stringify(data), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 
      var results = data.d; 
      if (results.length > 0) { 
       var updatedList = []; 
       for (var i in results) { 
        updatedList.push(results[i]); 
       } 
       $(lBox).append(updatedList.join('\n')); 
      } 
      else alert("No new items to update..."); 
     } 
    }); 
}, 5000); 

});

すべてのヘルプや提案を歓迎し、あなたが関数にパラメータを渡していない限り、あなたは、データフィールドには何もしたくない

答えて

0

を高く評価しました。そのフィールドをそのまま残しておけば、うまくいくはずです。

beforeSendパラメータを使用する必要はありませんが、シナリオが若干異なる場合があります。

+0

これをクリアしてくれてありがとう、私は実際にデータフィールドが何だったのか分からなかった。しかし、私はデータフィールドには、私は、クロムの開発者ツールからサーバ500のエラーを取得していたし、検索後、それは私が見つけたソリューションでした - それはエラーを停止したが、私は見ることができないWebメソッドが上記のように呼び出されます。私は別のwebMethod queryInvitedByを持っているので、5秒ごとに(期待どおり)呼び出されているのがわかります。なぜ、私はgetCurrentListが呼び出されているのを見ることができないのですか? – MattSull

+0

私はデータフィールドにあるものを取り出しました。私は今Webmethod発射を見ることができますが、私は再びそのエラーを取得しています: "500内部サーバーのエラー"。要求に対するプレビュー/応答を調べると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」と表示されます。 – MattSull

+0

C#コードをステップ実行して、例外をスローするものを正確に確認します。あなたの最初のforループには括弧がありません。 – servarevitas3

0

Actuallly問題は、AJAX呼び出しプロパティのデータのようです。次のようにデータのプロパティを変更してください:

data: "{}", 

不要の​​任意のパラメータを送信する(「JSON =」+ JSON.stringify(データ)あなたのウェブメソッドは、パラメータが含まれていません。)。またservarevitasの回答ごとに、beforeSendパラメータは必須ではありませんが、ajax呼び出しはすでにコンテンツタイプをJsonとして指定しています。