【问题标题】:Invoke server side method using XMLHttpRequest使用 XMLHttpRequest 调用服务器端方法
【发布时间】:2011-09-02 16:38:23
【问题描述】:

如何使用 XMLHttpRequest 直接调用我自己的服务器端函数。

假设我的 aspx 文件中有一个静态 webmethod,那么我如何通过 XMLHttpRequest 调用它。我需要将哪些标头信息传递给 asp.net 引擎,因此 asp.net 引擎可以调用我的方法并将响应返回到输出流中。

这样我需要调用我的服务器端方法

    <script type="text/javascript">
var request;

// A
// Here is the new function that is called when the user submits the form.
// This example uses POST.
function submitCallback() {
    var inputValue = document.getElementById("SearchInput").value;
    var sendStr = "name=" + inputValue;
    request = new XMLHttpRequest();

    // B
    // Specify the POST method and send it.
    request.open("POST", "Default.aspx/Getdata");
    request.onreadystatechange = readyCallback;
    request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    request.setRequestHeader("IsLookup", "true");
    request.send(sendStr);
}
</script>

请指导我....谢谢

【问题讨论】:

    标签: asp.net ajax xmlhttprequest


    【解决方案1】:

    当您说我的 aspx 文件中的一个静态 webmethod 时,我相信您可能指的是 ASP.NET 页面方法。 ASP.NET 页面方法(或在 JS 中使用的 Web 服务)对 i/p 和 o/p 使用 JSON 序列化。因此,您需要将 JSON 设置为请求的内容类型,并在正文中实际发送 JSON 字符串,即

    ...
    var sendStr = "{name:" + inputValue + "}";
    ...
    request.setRequestHeader("Content-Type", "application/json");
    ...
    request.send(sendStr);
    

    此外,我建议您使用 jquery 或 ASP.NET 生成的代理(通过 ScriptManager),而不是直接针对 XmlHttpRequest 进行编码。请参阅此article,了解如何使用 jquery 调用 Page 方法。

    【讨论】:

    • @Thomas,IMO,前两行只是需要更改的行 - 您引用的其余代码应保持原样。对于故障排除,您应该使用诸如 fiddler(或 Firefox 上的 Firebug)之类的工具来检查 HTTP 请求和响应。
    • request.setRequestHeader("IsLookup", "true"); 是什么意思IsLookup 是什么......它的重要性是什么。
    • @Thomas,AFAIK,它不是标准的 HTTP 标头,它也没有任何意义 ASP.NET Ajax。我假设它是您设置的一些自定义标头,以便在服务器端代码(可能是 HttpModule)中进行一些处理。
    【解决方案2】:

    我认为,最简单的方法是使用 jQuery 处理 ajax 请求:http://api.jquery.com/category/ajax/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多