我有一个ajax电话:
function TraerInstructivos() {
$.ajax({
type: "GET",
url: '<%= Page.ResolveUrl("~/Instructivo/Instructivos.aspx") %>' + '/TraerInstructivos',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
$.each(result, function (i, item) {
alert(item.DescripcionVideo);
alert(item.DireccionVideo);
});
},
error: function (response) {
alert("Error");
}
});
};
这会在我的aspx中调用以下网络方法:
[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public static List<InstructivoDTO> TraerInstructivos()
{
try
{
return Controles_Instructivo_Instructivos.TraerInstructivos();
}
catch (Exception ex)
{
throw ex;
}
}
这会在我的ascx中调用一段代码:
[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public static List<InstructivoDTO> TraerInstructivos()
{
List<InstructivoDTO> lstResponse = new List<InstructivoDTO>();
WC.InstructivoDTOResp response = new WC.InstructivoDTOResp() { ListaDeInstructivos = new WC.ListaDeInstructivos() };
//Traigo los instructivos
WC.InstructivoDTOReq request = new WC.InstructivoDTOReq()
{
TipoOperacion = WC.Accion.Consultar,
Operacion = Constantes.Consultas.Instructivos.TRAER_INSTRUCTIVOS_WEB_COMERCIO,
ListaDeInstructivos = new WC.ListaDeInstructivos()
};
using (WC.FacturaClient fc = new WC.FacturaClient())
{
response = fc.InstructivosEjecutar(request);
}
foreach (var i in response.ListaDeInstructivos)
{
lstResponse.Add(new InstructivoDTO()
{
DescripcionVideo = i.DescripcionVideo,
DireccionVideo = i.DireccionVideo,
EsBackOffice = i.EsBackOffice
});
}
return lstResponse;
}
它返回一个POCO对象或DTO的列表,实际上是简单的对象,它具有3个属性,其中2个为字符串类型,另一个为布尔值。
在我的ajax调用的警报功能中,我看到收到的结果是“未定义”。
我想念什么吗?我尝试了stringify
,JSON.Parse(response.d)
,上面写着“无效字符”。
编辑:
由于HaukurHaf的响应,我更改了jquery内的for循环,似乎在进行一些测试时更改了它,所以我的Ajax是:
<script type="text/javascript">
$(document).ready(function () {
TraerInstructivos();
});
function TraerInstructivos() {
$.ajax({
type: "GET",
url: '<%= Page.ResolveUrl("~/Instructivo/Instructivos.aspx") %>' + '/TraerInstructivos',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
$.each(response, function (i, item) {
alert(item.DescripcionVideo);
alert(item.DireccionVideo);
});
},
error: function (response) {
alert("Error");
}
});
};
</script>
仍然未定义,这是一个有趣的部分,如果我将console.log而不是警报发送到整个对象,则可以使用放在表上的值看到它:
答案 0 :(得分:0)
我找到了答案。
似乎我缺少整个解决方案的另一半。它不起作用的原因是,因为我说我将aJax对象返回给ajax调用,而是我返回了这些对象而未对其进行序列化。因此,现在的代码如下所示:
ASPX:
[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public static string TraerInstructivos()
{
try
{
List<InstructivoDTO> response = Controles_Instructivo_Instructivos.TraerInstructivos();
var json = new JavaScriptSerializer().Serialize(response);
return json;
}
catch (Exception ex)
{
throw ex;
}
}
AJAX通话:
function TraerInstructivos() {
$.ajax({
type: "GET",
url: '<%= Page.ResolveUrl("~/Instructivo/Instructivos.aspx") %>' + '/TraerInstructivos',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var res = JSON.parse(response.d);
$.each(res, function (i, item) {
alert(item.DescripcionVideo);
});
},
error: function (response) {
alert("Error");
}
});
};