0

私はいくつかのASP.NETPageMethodsで遊んでいましたが、これを使用して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に変更した場合、またはPageMethodの代わりにASMX / WCFサービスを使用した場合、それは魅力のように機能します

それで、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/xmlください。contentType

  • contentType、POSTで送信する情報の形式について説明しています。
  • dataType、応答で期待する内容を説明します。

不一致は奇妙な結果を生み出す可能性があります。

于 2012-10-08T21:16:34.497 に答える