2012-10-09 88 views
0

我不想用jquery $ .ajax調用asp.net服務器端代碼。 所以我寫了一個純JavaScript的ajax文件。但是當我打電話給webmethod時,這是行不通的。 可以anyony幫助我這是多麼正確?非常感謝你 。純JavaScript javascript ajax調用asp.net webmethod

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"; 
    } 

回答

3

在您的標記,你需要有一個ScriptManagerEnablePageMethods設置爲true 。這樣做可以確保您可以調用您標記爲[WebMethod]的方法。

在你的JavaScript中,你可以這樣調用你的方法:PageMethods.GetModel("userName", "password", OnSuccessMethod, OnFailureMethod); - 如果你這樣做,你不需要任何ActiveXObject/XmlHttpRequest東西,這使得事情變得更簡單。

+0

你是我的明星! – user441222

+0

沒問題。很高興我能幫上忙。 –