我有2个DropDownList,例如Master-Slave。这是我的Default.aspx:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td>
<asp:Label ID="MsLbl" runat="server" Text="Groups" />
</td>
<td>
<asp:DropDownList ID="Masterddl" runat="server">
<asp:ListItem Text="G1" Value="G1" />
<asp:ListItem Text="G2" Value="G2" />
<asp:ListItem Text="G3" Value="G3" />
</asp:DropDownList>
</td>
</tr>
<tr>
<td>
<asp:Label ID="Svlbl" runat="server" Text="Members" />
</td>
<td>
<asp:DropDownList ID="Slaveddl" runat="server" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
这是我的脚本:
$(document).ready(function () {
$('select#Masterddl').change(function () {
MasterChangeHandler($(this).val());
});
function MasterChangeHandler(Value) {
$.ajax({
type: 'Post',
url: 'MasterSlaveHandler.ashx',
dataType: "text",
data: 'ItemSelected=' + Value,
async: 'true',
success: function (data) { SuccessHandler1(data); }
});
}
function SuccessHandler1(data) {
$('select#Slaveddl').empty();
$.each(data, function (i, slaveValue) {
$('select#Slaveddl').append(
$('<option></option>').val(slaveValue.Value).html(slaveValue.Text)
);
});
}
和我的处理程序:
public class SlaveValues {
public string Value { get; set; }
public string Text { get; set; }
}
public class MasterSlaveDropDownListsHandler : IHttpHandler {
public bool IsReusable {
get { return true; }
}
public void ProcessRequest(HttpContext context) {
string valueSelected = context.Request["ItemSelected"];
List<SlaveValues> slaveValues = new List<SlaveValues>();
SlaveValues sv;
sv = new SlaveValues();
sv.Text = "SV1";
sv.Value = valueSelected + "s1";
slaveValues.Add(sv);
sv = new SlaveValues();
sv.Text = "SV2";
sv.Value = valueSelected + "s2";
slaveValues.Add(sv);
string responseText =
Newtonsoft.Json.JsonConvert.SerializeObject(slaveValues);
context.Response.ContentType = "text/json";
context.Response.Write(responseText);
}
}
但没有要追加的内容。另外,我在firebug窗口中看到如下响应(当我从Master ddl中选择G2时):
[{"Value":"G2s1","Text":"SV1"},{"Value":"G2s2","Text":"SV2"}]
对于更具体的视图,下图是当我在Master ddl中选择G3时,firebug窗口中的JSON选项卡:
我用这个新的脚本来更改脚本的成功方法:
function SuccessHandler2(data) {
$('select#Slaveddl').empty();
$.each(data, function (i, slaveValue) {
$('select#Slaveddl').append(
$('<option></option>').val('Member' + i).html('Member' + i)
);
});
}
当尝试使用此新脚本时,与Slave ddl的绑定可以正常工作,但需要执行一些其他操作:索引将member0改为member30,我不知道为什么。
我也尝试一下并正确附加:
function SuccessHandler3(data) {
var values = [{ "Value": "G2s1", "Text": "SV1" }, { "Value": "G2s2", "Text": "SV2"}];
$('select#Slaveddl').empty();
$.each(values, function (i, slaveValue) {
$('select#Slaveddl').append(
$('<option></option>').val('Member' + slaveValue.Value).html('Member' +
slaveValue.Text)
);
});
}
因此,我认为操纵返回值(数据)存在问题。
我也尝试了这个,只是第一个警报出现,显然(data.d)为null或未知对象:
function SuccessHandler4(data) {
var selection = $('select#Slaveddl');
$(selection).children().remove();
alert('in handler and remove children correctly');
if (data.d) {
alert('data.d is not null');
$(data.d).each(function (index, item) {
$(selection).append('<option>').val(item.Value).html(item.Text);
alert('after append in index: ' + index);
});
}
}
如何正确使用返回值并附加到Slave ddl? 问题出在哪里?
编辑:
通过对脚本和处理程序进行一些更改来找到它,如下所示:
脚本:
$(document).ready(function () {
$('select#Masterddl').change(function () {
CallHandler();
});
function CallHandler() {
$.ajax({
url: "FinalRequest.ashx",
contentType: "application/json; charset=utf-8",
data: { 'ItemSelected': $('select#Masterddl').val(), 'ID':
$('select#Masterddl').attr('id') },
dataType: "json",
responseType: "json",
success: function (data) { SuccessHandler(data); },
error: OnFail
});
return false;
}
function SuccessHandler(data) {
$('select#Slaveddl').empty();
$.each(data, function (i, slaveValue) {
$('select#Slaveddl').append(
$('<option></option>').val(slaveValue.Value).html(slaveValue.Text)
);
});
}
function OnFail(result) {
alert('Request failed');
}
});
处理程序:
public class FinalMasterSlaveHandler : IHttpHandler {
public bool IsReusable {
get { return false; }
}
public void ProcessRequest(HttpContext context) {
string valueSelected = context.Request["ItemSelected"];
string IDSelected = context.Request["ID"];
List<SlaveValues> slaveValues = new List<SlaveValues>();
SlaveValues sv;
sv = new SlaveValues();
sv.Text = valueSelected + IDSelected + "T1";
sv.Value = valueSelected + IDSelected + "V1";
slaveValues.Add(sv);
sv = new SlaveValues();
sv.Text = valueSelected + IDSelected + "T2";
sv.Value = valueSelected + IDSelected + "V2";
slaveValues.Add(sv);
JavaScriptSerializer javaScriptSerializer = new
JavaScriptSerializer();
string responseText = javaScriptSerializer.Serialize(slaveValues);
context.Response.ContentType = "text/json";
context.Response.Write(responseText);
}
}
在海里就是您的代码,我发现dataType: 'text'
应该是dataType: 'json'
。
请参阅jQuery.ajax(settings)
文档。
我正在尝试从GeoServer 2.3.0获取json功能。我复制了一个示例中的代码,它按预期工作。但是,当我将url设置为我的GeoServer和所需的图层时,返回的格式不同,并导致此错误:“未捕获的SyntaxError:意外标记:” 示例服务器以以下格式返回json功能: OpenLayers.协议。script.registry.c1({"type":"FeatureCollection"
问题内容: 我在使用flask.jsonify函数从字典输入中输出格式化的json响应时遇到了一些麻烦,如此处所述。 我的代码似乎正在返回Response对象,而不是我想要的格式化json对象。 我有 其中dict是从调用函数返回的字典对象。 在我的模板中,我有: 显示如下: 我该如何返回我要寻找的json表示形式? 问题答案: 你可以像这样使用json.dumps: 然后将其格式化为模板,如下所
问题内容: 我想从PHP脚本返回JSON。 我只是回应结果吗?我必须设置标题吗? 问题答案: 通常,没有它会没事,但是您可以并且应该设置Content-Type标头: 如果不使用特定的框架,通常会允许一些请求参数来修改输出行为。通常,为了快速进行故障排除,不发送标头,或者有时将数据有效载荷print_r盯着它很有用(尽管在大多数情况下,它不是必需的)。
问题内容: 我使用mysql 5.7 我想将联接表的结果串联到单列中。我使用包裹在函数中的函数。这是查询 列包含来自联接表的数据。数据已正确检索,但问题是列未转换为正确的JSON。 如您所见,最后有点“切”。 我也尝试过,但是现在它不能转换为正确的数组。它看起来像字符串太大,不适合列。有办法解决吗? 更新 问题必须出在不适合列的st大小中。我尝试从联接表中选择较少的列,并且它可以正常工作。也许有一
问题内容: 我一直在用这个把头砸在砖墙上,我已经尝试了很多关于stackoverflow的解决方案,但是找不到一个可行的解决方案! 基本上,当我发布我的AJAX时,PHP返回JSON,但AJAX显示的是Undefined而不是值: JS : PHP的 : firebug的JSON结果 : AJAX将JSON结果显示为Undefined,我不知道为什么。我尝试显示添加和。我也曾尝试将其更改为and
问题内容: 因此,可以尝试获取以下JSON对象: 有没有一种方法可以使用node或express在服务器的响应中生成完全相同的主体?显然,可以设置标头并指示响应的内容类型将为“ application / json”,但是存在多种写入/发送对象的方法。我经常看到的一种是通过使用以下形式的命令: 但是,这有两点可以使人争辩说它们是“问题”: 我们正在发送一个字符串。 此外,最后没有换行符。 另一个想