質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

2回答

6491閲覧

Ajaxの結果がundefinedになります

peperonti-no328

総合スコア25

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2015/08/17 10:15

カウンターを1アップして返すAjaxを実装してみましたが、返り値がundefiedになってしまいます。
どなたか、わかる方はご教示ください。

C#

1<%@ Page Language="C#" %> 2<%@ Import Namespace="System.Collections.Generic" %> 3<%@ Import Namespace="System.Linq" %> 4<%@ Import Namespace="System.Web.Services" %> 5<%@ Import Namespace="System.IO" %> 6<script runat="server"> 7 protected void Page_Load(object sender, EventArgs e) 8 { 9 if (!IsPostBack) 10 { 11 12 } 13 else 14 { 15 16 } 17 } 18 19 [WebMethod] 20 public static string countUp_click(int id, int count) 21 { 22 dynamic dataSet = new { id = id.ToString(), count = count++.ToString() }; 23 var s = new System.Web.Script.Serialization.JavaScriptSerializer(); 24 return s.Serialize(dataSet); 25 } 26 27</script> 28 29<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 30 31<html xmlns="http://www.w3.org/1999/xhtml"> 32<head runat="server"> 33 <head> 34 <title>Single-File Page Model</title> 35 <script src="Scripts/jquery-1.4.1.js"></script> 36 </head> 37 38</head> 39<body> 40 <form id="form1" runat="server"> 41 <div id="id1"> 42 <input type="submit" id="countUp" value="カウントアップ" /> 43 </div> 44 <div id="count"> 45 46 </div> 47 </form> 48 <script type="text/javascript"> 49 $(document).ready(function () { 50 $("#countUp").click(function () { 51 var hostUrl = "WebForm1.aspx/countUp_click"; 52 var param1 = 1; 53 var param2 = 10; 54 $.ajax({ 55 url: hostUrl, 56 type: "POST", 57 dataType: "application/json; charset=UTF-8", 58 data: JSON.stringify('{ "id" : ' + param1 + ', "count" : ' + param2 + ' }'), 59 success: function (data) { 60 alert("ok"); 61 // undefied と表示される 62 window.alert(data.id); 63 // undefied と表示される 64 window.alert(data.count); 65 $('#count').html(data.count); 66 }, 67 error: function (XMLHttpRequest, textStatus, errorThrown) { 68 alert("error"); 69 window.alert(XMLHttpRequest.toString()); 70 window.alert(textStatus.toString()); 71 window.alert(errorThrown.toString()); 72 } 73 }); 74 75 }); 76 }); 77 </script> 78</body> 79</html> 80

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

取りあえず動くようにしたものを。

lang

1<%@ Page Language="C#" %> 2 3<%@ Import Namespace="System.Collections.Generic" %> 4<%@ Import Namespace="System.Linq" %> 5<%@ Import Namespace="System.Web.Services" %> 6<%@ Import Namespace="System.IO" %> 7<script runat="server"> 8 protected void Page_Load(object sender, EventArgs e) 9 { 10 if (!IsPostBack) 11 { 12 } 13 else 14 { 15 } 16 } 17 18 [WebMethod] 19 public static string countUp_click(int id, int count) 20 { 21 count++; 22 var dataSet = new { id = id, count = count }; 23 var s = new System.Web.Script.Serialization.JavaScriptSerializer(); 24 return s.Serialize(dataSet); 25 } 26 27</script> 28<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 29<html xmlns="http://www.w3.org/1999/xhtml"> 30<head id="Head1" runat="server"> 31 <title>Single-File Page Model</title> 32 <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script> 33</head> 34<body> 35 <form id="form1" runat="server"> 36 <div id="id1"> 37 <input type="button" id="countUp" value="カウントアップ" /> 38 </div> 39 <div id="count"> 40 </div> 41 </form> 42 <script type="text/javascript"> 43 $(document).ready(function () { 44 $("#countUp").click(function () { 45 var hostUrl = "WebForm1.aspx/countUp_click"; 46 var param1 = 1; 47 var param2 = 10; 48 $.ajax({ 49 url: hostUrl, 50 type: "POST", 51 contentType: "application/json; charset=utf-8", 52 dataType: "json", 53 data: "{'id' : " + param1 + ", 'count' : " + param2 + " }", 54 success: function (data) { 55 alert("ok"); 56 // ここのパースがキモ 57 var jdata = JSON.parse(data.d); 58 window.alert(jdata.id); 59 window.alert(jdata.count); 60 $('#count').html(jdata.count); 61 }, 62 error: function (XMLHttpRequest, textStatus, errorThrown) { 63 alert("error"); 64 window.alert(XMLHttpRequest.toString()); 65 window.alert(textStatus.toString()); 66 window.alert(errorThrown.toString()); 67 } 68 }); 69 70 }); 71 }); 72 </script> 73</body> 74</html>

ただし素直にWebサービス使ったほうがいいと思います。
ASP.NETとC#4.0を使ったWebサービスの作成とjQueryからの呼び出し方

投稿2015/08/18 06:29

sho_cs

総合スコア3541

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

peperonti-no328

2015/08/18 09:25

$('#count').html(jdata.count); の部分を $('#count').html('<p>' + jdata.count + '</p>'); に変えてみたのですが、カウントアップされた結果がブラウザに出力されません(T_T) どう修正すればいいのでしょうか?
sho_cs

2015/08/18 09:34

私の環境ではIE、FireFoxで確認できています。 alertは表示されていますか?
sho_cs

2015/08/19 01:37

countUpのinputのtypeがsubmitのままになっていませんか?
peperonti-no328

2015/08/20 02:40

submitになってました。ありがとうございます。
peperonti-no328

2015/08/20 12:12

dataSet がjsonの配列 [{"count":10,"id":1},{"count":20,"id":2},{"count":30,"id":3}] になっている場合、javascript側で出力する方法がわかりません。 調べたのですが、見つからないですorz
peperonti-no328

2015/08/24 06:05

Webサービスを使ってみたのですが、ビルドが通らず困っています。 助けてください! Service1.svc.csのコード using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Activation; using System.ServiceModel.Web; using System.Text; namespace AjaxTest { [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class Service1 { // HTTP GET を使用するために [WebGet] 属性を追加します (既定の ResponseFormat は WebMessageFormat.Json)。 // XML を返す操作を作成するには、 // [WebGet(ResponseFormat=WebMessageFormat.Xml)] を追加し、 // 操作本文に次の行を含めます: // WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml"; [OperationContract] public void DoWork() { // 操作の実装をここに追加してください } // 追加の操作をここに追加して、[OperationContract] とマークしてください [OperationContract] public static voteItem[] countUp_click(int id, int count) { int num = count + 1; List<voteItem> items = new List<voteItem>(); for (int i = 0; i < 10; i++) { // ここでエラーになって、ビルドが通らない items.Add(new voteItem(i + 1, (i + 1) * 10)); } dynamic dataSet = new { id = id.ToString(), count = num.ToString() }; var s = new System.Web.Script.Serialization.JavaScriptSerializer(); Console.WriteLine(s.Serialize(dataSet)); return s.Serialize(dataSet); } } public class voteItem { int id { get; set; } int count { get; set; } } } Web.configの内容 <?xml version="1.0"?> <!-- ASP.NET アプリケーションを構成する方法の詳細については、 http://go.microsoft.com/fwlink/?LinkId=169433 を参照してください --> <configuration> <connectionStrings> <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /> </connectionStrings> <system.web> <compilation debug="true" targetFramework="4.0" /> <!--<authentication mode="Forms"> <forms loginUrl="~/Account/Login.aspx" timeout="2880" /> </authentication>--> <membership> <providers> <clear/> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> </providers> </membership> <profile> <providers> <clear/> <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/> </providers> </profile> <roleManager enabled="false"> <providers> <clear/> <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" /> <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> </providers> </roleManager> </system.web> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="MyServiceTypeBehaviors" > <serviceMetadata httpGetEnabled="true" /> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> <services> <service name="AjaxTest.Service1"> <endpoint address="AjaxTest/Service1" behaviorConfiguration="AjaxTest.Service1AspNetAjaxBehavior" binding="webHttpBinding" contract="AjaxTest.Service1" /> </service> </services> </system.serviceModel> </configuration> WebForm1.aspxの内容 <%@ Page Language="C#" %> <%@ Import Namespace="System.Collections.Generic" %> <%@ Import Namespace="System.Linq" %> <%@ Import Namespace="System.Web.Services" %> <%@ Import Namespace="System.IO" %> <script runat="server"> //protected void Page_Load(object sender, EventArgs e) //{ // if (!IsPostBack) // { // } // else // { // } //} //[WebMethod] //public static string countUp_click(int id, int count) //{ // count++; // var dataSet = new { id = id, count = count }; // var s = new System.Web.Script.Serialization.JavaScriptSerializer(); // return s.Serialize(dataSet); //} </script> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>Single-File Page Model</title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script> </head> <body> <form id="form1" runat="server"> <div id="id1"> <input type="button" id="countUp" value="カウントアップ" /> </div> <div id="count"> </div> </form> <ul id="result"></ul> <script type="text/javascript"> $(document).ready(function () { $("#countUp").click(function () { //var hostUrl = "WebForm1.aspx/countUp_click"; var hostUrl = "Service1/countUp_click"; var param1 = 1; var param2 = 10; $.ajax({ url: hostUrl, type: "POST", contentType: "application/json; charset=utf-8", dataType: "json", data: "{'id' : " + param1 + ", 'count' : " + param2 + " }", success: function (data) { alert("ok"); // ここのパースがキモ var jdata = JSON.parse(data.d); // 配列jdataを順に処理 $.each(jdata, function(index, elem) { // 情報を「id(count)」の形式でリストに整形 $('<li></li>') .append(elem.id + '(' + elem.count + ')') .appendTo('#result'); } //window.alert(jdata.id); //window.alert(jdata.count); $('#count').html(jdata.count); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert("error"); window.alert(XMLHttpRequest.toString()); window.alert(textStatus.toString()); window.alert(errorThrown.toString()); } }); }); }); </script> </body> </html>
guest

0

lang

1data: JSON.stringify('{ "id" : ' + param1 + ', "count" : ' + param2 + ' }'),

でなく、

lang

1data: JSON.stringify({id : param1, count : param2 }),

のようにしなければならないのでは?
今のままだと、json文字列をさらにjsonにしてしまっていると思います。

追記

dataTypeにcontentTypeが記述されてしまっていますね。

lang

1 dataType: "application/json; charset=UTF-8",

でなく、

lang

1 contentType: "application/json; charset=utf-8", 2 dataType: "json",

としなければならないと思います。

投稿2015/08/17 13:40

編集2015/08/18 02:12
eripong

総合スコア1546

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

peperonti-no328

2015/08/18 01:49

```JavaScript data: JSON.stringify({id : param1, count : param2 }), ``` のように変更してみましたが、やはりundefinedが返ってきてしまいます。
eripong

2015/08/18 02:13

すみません。 dataTypeの表記も、修正する必要があるようです。 それから、呼び出されたかどうか確認するために、 サーバ側でログ出力してみてはいかがでしょうか?
peperonti-no328

2015/08/18 09:27

eripongさん、たびたびありがとうございます。 サーバ側でログ出力する方法としては、Console.WriteLine以外に何があるものでしょうか?
peperonti-no328

2015/08/20 02:40

ありがとうございます。調べて使ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問