1

我需要在代码隐藏处从 MyMethod 返回一个字符串数组。但是我是否在 aspx 页面上使用它来解析它javascript

[WebMethod]
public static string[] MyMethod(){
   return new[] {"fdsf", "gfdgdfgf"};
}

..........
function myFunction() {
            $.ajax({ ......
                    success: function (msg) {
                                //how do I parse msg?
                                }
            });
        };
4

3 回答 3

3

首先,确保您已将您的类标记[ScriptService]为允许通过 AJAX 调用它。就像是:

[ScriptService] //<-- Important
public class WebService : System.Web.Services.WebService
{
   [ScriptMethod] //<-- WebMethod is fine here too
   public string[] MyMethod()
   {
      return new[] {"fdsf", "gfdgdfgf"};
   }
}

然后您可以直接使用 jQuery读取结果,因为无需解析任何内容:

$(document).ready(function() {
  $.ajax({
    type: "POST",
    url: "WebService.asmx/MyMethod",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
      // msg.d will be your array with 2 strings
    }
  });
});

另一种方法是仅包含对以下内容的引用:

<script src="WebService.asmx/js" type="text/javascript"></script>

这将生成代理类以允许您直接调用 Web 方法。例如:

WebService.MyMethod(onComplete, onError);

onComplete函数将接收一个带有 Web 服务调用结果的参数,在您的情况下是一个包​​含 2 个字符串的 Javascript 数组。在我看来,这是一个比使用 jQuery 并担心 URL 和 HTTP 有效负载更简单的解决方案。

于 2012-07-13T21:36:10.593 回答
0

像这样使用 jQuery 迭代器迭代 msg 结果中的字符串。

function myFunction() {
    $.ajax({ ......
        success: function (msg) {
            $.each(msg, function(index, value) {
                alert(value);
            });
        }
    });
};
于 2012-07-13T21:41:40.783 回答
0

响应object将包含一个名为的对象,该对象d包装从您的 WebMethod 返回的值。像这样访问它:

function myFunction() {
    $.ajax({ ......
        success: function (msg) {
            //how do I parse msg?
            alert(msg.d); //alerts "fdsf", "gfdgdfgf"
        }
    });
};

请参阅此问题以获取解释。

于 2012-07-13T21:46:10.847 回答