-1

我在 C# 文件中创建了一个 web 函数,称为test它返回一个简单的列表进行测试

[WebMethod(EnableSession = false)]
public static List<string> test()
{
    List<string> a = new List <string>() ; 
    a.Add("1s");
    a.Add("2s");
    return a; 
}

我尝试WEBMETHOD使用 JQUERY AJAX 从前端调用它

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

4

3 回答 3

1

我相信 DOM 异常与innerHTML()通过 jQuery 的html()方法将数组对象传递给 . 尝试先将数组值格式化为字符串:

success: function (msg) {
  // Builds a string like '1s, 2s'
  var formattedMessage = msg.d.join(', ');

  $(".resultbox").html(formattedMessage);
}

当然,手动构建格式化字符串并不好玩。为了改善这种情况,请研究客户端模板解决方案,例如 jQuery Templates 及其继任者 JsRender。

于 2012-02-19T18:59:05.320 回答
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>");
            });
        }
    });

}
于 2012-02-19T07:31:17.757 回答
-2

由于您正在发送一个字符串列表,WebMethod所以msg将是一个数组。在那种情况下msg.d会给你undefined结果。如果您想将它们显示为以逗号分隔的组合字符串,请尝试此操作。

ajax默认情况下本质上是异步的,您不能从Test方法返回 ajax 响应。如果要返回它,请设置asyncfalsewhich 将等待响应到来,然后您可以返回它。

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;
}
于 2012-02-19T06:03:22.093 回答