纯javascript ajax调用asp.net webmethod

时间:2012-10-09 01:49:17

标签: asp.net ajax

我不想用jquery $ .ajax调用asp.net服务器端代码。 所以我写了一个纯粹的javascript ajax文件。但是当我调用webmethod时,这不起作用。 Anyony可以帮我解决这个问题吗?非常感谢你。

ajax.js:

var ajax = {
    _params: null,
_callback: null,
 _xhr: null,
_createXHR: function () {
if (window.ActiveXObject) {
 _xhr = new ActiveXObject("Microsoft.XMLHTTP");     //IE
}
    else if (window.XMLHttpRequest) {
        _xhr = new XMLHttpRequest();      //FireFox,Chrome et.
    }
},

_ajaxcallback: function () {
    if (_xhr.readyState == 4) {
        if (_xhr.status == 200) {
            _callback.call(this, _xhr.responseText)
        }
    }
},

_changeParams: function () {
    var args = arguments[0];
    var s = "";
    for (var i in args) {
        s += "&" + i + "=" + args[i];
    }
    _params = s;
},

get: function (url, params, callback) {
    _callback = callback;
    ajax._createXHR();
    ajax._changeParams(params);
    if (null != _xhr) {
        _xhr.open('get', url + '?' + _params, true);
        _xhr.onreadystatechange = ajax._ajaxcallback;
        _xhr.send();
    }
},

post: function (url, params, callback) {
    _callback = callback;
    ajax._createXHR();
    ajax._changeParams(params);
    if (null != _xhr) {
        _xhr.open('post', url, true);
        _xhr.onreadystatechange = ajax._ajaxcallback;
        _xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        _xhr.send(_params);
    }
}
}

WebForm1.aspx的

<head runat="server">
<title></title>
<script src="ajax.js" type="text/javascript"></script>
<script type="text/javascript">
    function ajaxtest() {
        var uid = document.getElementById("txtuid").value;
        var pwd = document.getElementById("txtpwd").value;
        ajax.post("WebForm1.aspx/GetModel", "{ 'uid':" + uid + ", 'pwd':" + pwd + " }", function (data) {
            alert(data);
        });
    }
</script>

</head>
<body>
<form id="form1" runat="server">
<div>
<input type="text" id="txtuid" value="eeee" />
<input type="text" value="222" id="txtpwd" onblur="ajaxtest()"/>

WebForm1.cs:

     [WebMethod]
    public static string GetModel(string uid,string pwd)
    {

     return "1";
    }

2 个答案:

答案 0 :(得分:3)

在您的标记中,您需要ScriptManager并将EnablePageMethods设置为true。这样做可确保您可以使用[WebMethod]调用标记的方法。

在您的JavaScript中,您可以像这样调用您的方法:PageMethods.GetModel("userName", "password", OnSuccessMethod, OnFailureMethod); - 如果您这样做,您将不需要任何ActiveXObject/XmlHttpRequest内容,这样可以使事情变得更简单。

答案 1 :(得分:0)

使用Michael Schwarz的AJAX.PRO - &gt; http://www.ajaxpro.info/