私はいくつかの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;
}