0

我正在使用一些 ASP.NET PageMethods,我尝试使用以下方法简单地返回 XML:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public static string GetIPLocation(string ip)
{
    var doc = XDocument.Load(HttpContext.Current.Server.MapPath("relative xml path"));
    var s = doc.ToString();

    return s;
}

完全相同的代码实际上适用于 ASMX 服务,(尽管删除了static修饰符)

但事实证明,在使用 PageMethods 时我无法获取 XML,而是收到了我的页面的 HTML 代码。

这是我的 AJAX 代码:

$.ajax({
    url: "<%: this.ResolveClientUrl("~/relative path/GetIPLocation") %>",
    type: "POST",
    contentType: "application/xml; charset=utf-8;",
    dataType: "xml",
    data: "{ip:'"+$target.val()+"'}",
    async: true,
    cache: false,
    success: function (msg) {
        console.log("MSG: %o", msg);
        viewModel.ip1(msg.d.IP);
    },
    error: function (XHResponse, errorMessage, errorCode) {
        console.log("AJAX Error: %o", XHResponse);
    }
});

如果我将响应更改为 JSON,或者如果我使用 ASMX/WCF 服务而不是我的 PageMethod,它就像一个魅力

那么 PageMethods 是否无法通过设计返回 XML?...如果不是,我错过了什么?

编辑 1

正如@JamieSee 评论的那样,我做了这个修改,结果还是一样:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public static XDocument(GetIPLocation(string ip)
{
     return XDocument.Load(HttpContext.Current.Server.MapPath("relative xml path"));
}

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public static XmlDocument(GetIPLocation(string ip)
{
    var x = new XmlDocument();

    x.LoadXml(HttpContext.Current.Server.MapPath("relative xml path"));

    return x;
}
4

1 回答 1

2

由于您似乎正在发送 JSON 格式的数据,请尝试在您的 jQuery 调用中使用application/json而不是。application/xmlcontentType

  • contentType描述了您通过 POST 发送的信息的格式。
  • dataType描述了您对响应的期望。

不匹配可能会产生奇怪的结果。

于 2012-10-08T21:16:34.497 回答