- - PR -
ATLASでのデータセットの戻り値について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-06-27 13:33
いつもお世話になります。
今回VS2005(ASP.NET(VB) ATLAS)にて開発を 行っています。 テキストボックス1 ドロップダウンリスト1 がありテキストボックスをEnter時に入力された内容を キーにDBよりデータを取得しドロップダウンリストに データをセットしようとしているのですが、 サーバー側の処理でデータセット(dataset)にデータを 格納しそれをリターンする?部分でうまくいきません。 javascript部分 var nm = $get('Txt_Urinm').value; AJAXDataGet.Get_Torisaki(nm, OnComplete, OnTimeout,OnError); 〜 function OnComplete1(result1){ var ds = result1.value; } //エラー時処理 function OnTimeout(result) { alert('タイムアウト発生'); } function OnError(result) { alert('エラー発生'); } WEBサービス(サーバー側)のコード <WebMethod()> _ Public Function Get_Torisaki(ByVal nm As String) As DataSet '取引先の検索 Dim result As New DataSet ※データ取得コード Return result End Function 上記内容でWEBサービスのメソッドを呼び出すと 問題なくEnd Functionまでいくのですが、 (デバックでresultの中にデータが格納されてい るのも確認済み) その後にjavascriptのOncompleteにはいかず OnTimeoutの部分に飛んでエラーメッセージが 出力されます。ここでリターンするのをdataset ではなくStringにして値を返すとOncomplete部分 に飛んでくれます。 どこかおかしい部分がわかられる方がおられましたら 宜しくお願いします。 | ||||
|
投稿日時: 2007-06-27 14:43
このコードだけみると、
> AJAXDataGet.Get_Torisaki(nm, OnComplete, OnTimeout,OnError); 終了時のOnCompleteを呼び出したいのだろうけど、 > function OnComplete1(result1){ OnComplete1しかないから動かない、というように見えてしまいますが。。。 #typoなんだろうなぁ。。。 | ||||
|
投稿日時: 2007-06-27 14:58
お返事ありがとうございました。
>> function OnComplete1(result1){ の部分ですが書き間違えました OnComplete(result){ と記述しているのにOnTimeOutにいって しまいます。 #typoとはなんでしょうか? わかれば教えて下さい。 宜しくお願いします。 | ||||
|
投稿日時: 2007-06-27 20:24
ATLASということですが、正式版の ASP.NET AJAX Extensions 1.0 をお使いなら、
AJAXDataGet.Get_Torisaki(nm, OnComplete, OnTimeout, OnError); は、 AJAXDataGet.Get_Torisaki(nm, SucceededCallback, FailedCallback, userContext); に変更されていますので注意してください。 【参考】 Generated Proxy Classes Web Service Methods http://ajax.asp.net/docs/ClientReference/Sys.Net/GeneratedProxyClasses/WebServiceMethods.aspx [ASP.NET AJAX] クライアントスクリプトからの Web サービスの非同期呼び出し http://bitwiz.jp/tabid/56/EntryID/22/Default.aspx OnTimeout が呼び出されているのは、この変更が原因では。 おそらく何かしらのエラーが起きているものと思います。 詳しいエラー情報を、次の例のようにして取得してみてください。 function FailedCallback(error) { var stackTrace = error.get_stackTrace(); var message = error.get_message(); var statusCode = error.get_statusCode(); var exceptionType = error.get_exceptionType(); var timedout = error.get_timedOut(); $get("result").innerHTML = "スタックトレース : " + stackTrace + "<br/>" + "エラーメッセージ : " + message + "<br/>" + "ステータスコード : " + statusCode + "<br/>" + "例外の種類 : " + exceptionType + "<br/>" + "タイムアウト : " + timedout; } おそらく、ASP.NET AJAX を使ったWebサービスで DataSet をそのまま返しているのに何かあるのだと思いますが、ちょっとわかりません。 JSONシリアライズがだめなのかなも? 次のような属性を指定したらどうでしょうか? <WebMethod()> _ <ScriptMethod(ResponseFormat:=ResponseFormat.Xml, _ XmlSerializeString:=True)> _ Public Function Get_Torisaki(ByVal nm As String) As DataSet '取引先の検索 Dim result As New DataSet ※データ取得コード Return result End Function | ||||
|
投稿日時: 2007-06-28 08:27
まず、ATLASからASP.NET AJAX 1.0に移行してください。
ATLASでは、WebサービスからDataSet、DataTableを返すことができたはずでしたが、 AJAX 1.0では、DataSet、DataTableをシリアライズしていないようです。 DataTableをGeneric Listに格納して返すとJSONにシリアライズするようです。 このサンプルが参考になるかと: http://jsajax.com/SamplesByID.aspx?id=456 「その他」のタブをクリックするとWebサービスのソースが表示されます。 _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 [ メッセージ編集済み 編集者: Access 編集日時 2007-06-28 08:40 ] | ||||
|
投稿日時: 2007-06-28 09:40
chackさん、Accessさんお返事ありがとうございます。
まずATLASと記述していたのですが、インストールしていたのは ASP.NET AJAX Extensions 1.0でした。 AJAX1.0とATLASがごっちゃになってすみませんでした。 まずchackさんからのお返事で //<WebMethod()> _ //<ScriptMethod(ResponseFormat:=ResponseFormat.Xml, _ //XmlSerializeString:=True)> _ とありWEBサービス部分に記述してみたのですが、 ScriptMethodがエラーになりました。 どの名前空間にあるのかがわからず同じような文言のものを 探していたら、ScriptMethodAttributeというのがあり <ScriptMethodAttribute(ResponseFormat:=ResponseFormat.Xml, _ XmlSerializeString:=True)> _ と実装し、実行したところ戻り値としてデータセットを受け取る ことが出来ました。 function SucceededCallback(result){ ※resultの部分に取得OK 〜 } しかしresultからの取り出し方法がわからず今悪戦苦闘中です。 ※デバッグでresultを見ると,text xmlというプロパティに 値が入っていそうなのですが・・・ ここの取り出し部分でいい方法があれば宜しくお願いします。 Accessさんの >DataTableをGeneric Listに格納して返すとJSONにシリアライズするようです。 上記のやり方でなら確かに問題なく出来そうです。 こちらの方法も試してみようと思います。 引き続き検証の方を行います。 | ||||
|
投稿日時: 2007-06-28 10:17
http://ja.wikipedia.org/wiki/Typo | ||||
|
投稿日時: 2007-06-28 14:06
yosさんお返事ありがとうございます。
typoの意味わかりました。 とりあえず今回のデータ取得はAccessさんに 教えて頂いた方法で解決しました。 本当にありがとうございました。 |
1