实例化从发出GET请求收到的值

时间:2014-08-20 09:59:44

标签: c# javascript asp.net web-services webmethod

我有这个JS代码,它将从C#代码

接收字符串值
function getMsg() {
var xmlhttp = new XMLHttpRequest(); 
xmlhttp.open("GET", "andSert.asmx/GetMessage", true); //async

var temp = the string I receive from the GET above

return temp;

}

这是C#代码

[WebMethod]
public string GetMessage() {
    XmlTextReader reader = new XmlTextReader (Global.sAppPath + "/alt/importantMsg.xml");

    string message = null;

    while (reader.Read()) {
        if (reader.IsStartElement ()) {
            switch (reader.Name.ToString ()) {

            case "Message":
                message = reader.ReadString();
                break;
            }
        }
    }

    return message;
}

我的问题是我不知道如何实例化我在JS代码中执行GET请求时获得的消息。我测试过一切正常,并返回一个字符串。但我需要实例化该字符串,以便我可以在另一个JS文件中使用它。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可能需要考虑使用jQuery $ .ajax,因为它可以保护您免受浏览器怪癖的影响。

同步解决方案:

function getMsg() {
  var msg = "";
  xmlhttp = new XMLHttpRequest();
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    { 
      msg = JSON.parse(xmlhttp.responseText).d;
    }
  };
  xmlhttp.open("GET","andSert.asmx/GetMessage",false);
  xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
  xmlhttp.send();
  return msg;
}

异步解决方案:

function getMsg(fCallback) {
  var msg = "";
  xmlhttp = new XMLHttpRequest();
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
      fCallback(JSON.parse(xmlhttp.responseText).d);
    }
  };
  xmlhttp.open("GET","andSert.asmx/GetMessage",true);
  xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
  xmlhttp.send();
}
getMsg(function(message) { alert(message); });

此外,服务必须妥善装饰:

using System.Web.Script.Services;
using System.Web.Services;

namespace Whatever {
  [WebService(Namespace = "http://tempuri.org/")]
  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  [System.ComponentModel.ToolboxItem(false)]
  [ScriptService]
  public class andSert : System.Web.Services.WebService {
    [ScriptMethod(UseHttpGet = true)]
    [WebMethod]
    public string GetMessage() {
      return "Hello World";
    }
  }
}

请注意,这些类的名称应为class MyFavouriteClass,使用class andSert来匹配您的问题。