我在名为test
的C#文件中创建了一个Web函数,它返回一个简单的List for testing
[WebMethod(EnableSession = false)]
public static List<string> test()
{
List<string> a = new List <string>() ;
a.Add("1s");
a.Add("2s");
return a;
}
我尝试使用JQUERY AJAX从前端调用此WEBMETHOD
function Test() {
$.ajax({
type: "POST",
url: "Default.aspx/test",
data: "",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
x = msg;
$(".resultbox").html(msg.d);
}
});
return x;
}
当我打电话给test();来自控制台的消息是:
Uncaught Error: NOT_FOUND_ERR: DOM Exception 8 jquery-1.6.1.min.js:18
在常见的情况下,我将对象转换为JSON并返回它们,这通常有效,但我很想知道如何将对象从WEBMETHOD返回到前端,它们是否序列化为文本,为什么会发生此错误。
答案 0 :(得分:1)
试试这个。
function Test() {
$.ajax({
type: "POST",
url: "Default.aspx/test",
data: "",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
msg = msg.hasOwnProperty("d") ? msg.d : msg;
$.each(msg, function (index, value) {
$(".resultbox").append("<p>" + value + "</p>");
});
}
});
}
答案 1 :(得分:1)
我认为DOM异常与通过jQuery的innerHTML()
方法将数组对象传递到html()
有关。首先尝试将数组值格式化为字符串:
success: function (msg) {
// Builds a string like '1s, 2s'
var formattedMessage = msg.d.join(', ');
$(".resultbox").html(formattedMessage);
}
当然,手动构建格式化字符串并不好玩。要改善这种情况,请研究jQuery模板及其后续JsRender等客户端模板解决方案。
答案 2 :(得分:-2)
由于您要从WebMethod
发送字符串列表,因此msg
将是一个数组。在这种情况下,msg.d
会为您提供undefined
结果。如果您想将它们显示为由逗号分隔的组合字符串,请尝试此操作。
ajax
本质上是异步的,您无法从Test
方法返回ajax响应。如果您想要返回它,请将async
设置为false
,这将等到响应结束,然后您可以将其返回。
function Test() {
var x = null;//Define variable x
$.ajax({
type: "POST",
async: false,
url: "webservice.asmx/test",//Web service url
data: "",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
x = msg;
$(".resultbox").html(msg.join(','));
}
});
return x;
}