我正在研究jquery以将数据绑定到下拉列表&我也使用了Web服务方法,它工作得很好但是我没有得到一些澄清我,e用于将数据绑定到一个下拉列表我从web方法获取数据,返回到Array对象和另一个下拉列表我得到来自Web方法的数据,它是根据JSON对象返回的,但在前端我没有任何区别。他们中的大多数都告诉序列化的json好方法,所以这里究竟发生了什么?我有点困惑 请帮我 谢谢
**here is my code**
Default.aspx
<html>
<head runat="server">
<title>JsonAndToArray</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
ddlActivityType = document.getElementById("<%=ddlActivity.ClientID %>");
$.ajax({
type: "POST",
contentType: "application/json;charset/utf-8",
url: "Visit.asmx/GetActivityByJSON",
dataType: "json",
success: function(results) {
results = eval(results.d);
$('#ddlActivity').get(0).options.length = 0;
$('#ddlActivity').get(0).options[0] = new Option(' --select-- ', '0');
$.each(results, function(val, text) {
$('#ddlActivity').append($('<option></option>').val(text[1]).html(text[0]));
});
}
});
ddlActivityType1 = document.getElementById("<%=ddlActivity2.ClientID %>");
$.ajax({
type: "POST",
contentType: "application/json;charset/utf-8",
url: "Visit.asmx/GetActivity",
dataType: "json",
success: function(results) {
results = eval(results.d);
$('#ddlActivity2').get(0).options.length = 0;
$('#ddlActivity2').get(0).options[0] = new Option('--select--', '0');
$.each(results, function(val, text) {
$('#ddlActivity2').append($('<option></option>').val(text[1]).html(text[0]));
});
}
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
Json-Activity :
<select id="ddlActivity" runat="server">
</select>
<br />
<br />
ToArray-Activity :
<select id="ddlActivity2" runat="server">
</select>
<br />
<br />
<asp:Button ID="btnJson" runat="server" Text="Json" OnClick="Json_click"/>
</form>
</body>
</html>
Defalut.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Web.Script.Serialization;
public partial class Defalut: System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Json_click(object sender,EventArgs e)
{
}
}
**webservices**
**
- Visit.asmx
**
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;
using System.Data.SqlClient;
using System.Web.Script.Serialization;
using Facade;
/// <summary>
/// Summary description for Visit
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class Visit : System.Web.Services.WebService
{
public Visit()
{
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public IList<string[]> GetActivity()
{
IList<string[]> values = new List<string[]>();
//string value = "";
try
{
SqlConnection con_New = new SqlConnection(@"Data Source=SQLEXPRESS;Initial Catalog="Database";Integrated Security=True;");
con_New.Open();
SqlCommand cmdSelect_ST = new SqlCommand("select id,name from table", con_New);
SqlDataAdapter da_ST = new SqlDataAdapter(cmdSelect_ST);
DataSet ds = new DataSet();
da_ST.Fill(ds);
DataTable dt = ds.Tables[0];
for (int i = 0; i < dt.Rows.Count; i++)
{
string[] ActivityType = new string[2];
ActivityType[0] = dt.Rows[i]["name"].ToString();
ActivityType[1] = dt.Rows[i]["id"].ToString();
values.Add(ActivityType);
}
}
catch (Exception ex)
{
}
return values;
}
[WebMethod]
public string GetActivityByJSON()
{
IList<string[]> values = new List<string[]>();
string value = "";
try
{
SqlConnection con_New = new SqlConnection(@"Data Source=SQLEXPRESS;Initial Catalog="Database";Integrated Security=True;");
con_New.Open();
SqlCommand cmdSelect_ST = new SqlCommand("select name,id from table", con_New);
SqlDataAdapter da_ST = new SqlDataAdapter(cmdSelect_ST);
DataSet ds = new DataSet();
da_ST.Fill(ds);
DataTable dt = ds.Tables[0];
for (int i = 0; i < dt.Rows.Count; i++)
{
string[] ActivityType = new string[2];
ActivityType[0] = dt.Rows[i]["name"].ToString();
ActivityType[1] = dt.Rows[i]["id"].ToString();
values.Add(ActivityType);
}
JavaScriptSerializer js = new JavaScriptSerializer();
value = js.Serialize(values);
}
catch (Exception ex)
{
}
return value;
}
}
答案 0 :(得分:0)
在第一次调用中,您将返回一个数组,该数组由系统转换为json数组。你回复:
IList<string[]> values = new List<string[]>();
在第二次调用中,您将转换为jsaon数组并将其作为字符串返回。以下是执行转换的代码:
JavaScriptSerializer js = new JavaScriptSerializer();
value = js.Serialize(values);
因为json只是以某种方式格式化的字符串 - 所以没有区别。就在创建要发回的字符串以及谁(您的代码或系统代码)创建它时。