调用由AJAX返回非String的Web方法[ASP.net]

时间:2012-02-19 05:45:28

标签: jquery asp.net ajax asmx microsoft-ajax

我在名为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返回到前端,它们是否序列化为文本,为什么会发生此错误。

3 个答案:

答案 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;
}