Добрый день!
Хотел сделать на сайте поиск с выводом результатов во время набора(как в яндексе или гугле), для этого использовал Ajax:
Сама страница с формой поиска:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
<script language = "javascript" type="text/javascript">
function setData(sID) {
var targetObj = document.getElementById("idinput");
var targetObj1 = document.getElementById(sID);
var targetObj2 = document.getElementById('<%=iddiv.ClientID%>');
targetObj.value = "";
targetObj.value = targetObj1.innerHTML;
targetObj2.innerHTML = "";
}
function postDataFromServer(dataSource, targetControl, datasend) {
var myAjaxObject = false;
var vIdInput = "idinput";
try {
myAjaxObject = new ActiveXObject("MSXML2.XMLHttp.5.0");
}
catch (exception1) {
try {
XMLHttpRequestObject = new ActiveXObject("MSXML2.XMLHttp.4.0");
}
catch (exception2) {
try {
XMLHttpRequestObject = new ActiveXObject("MSXML2.XMLHttp.3.0");
}
catch (exception3) {
try {
XMLHttpRequestObject = new ActiveXObject("MSXML2.XMLHttp");
}
catch (exception4) {
if (window.XMLHttpRequest) {
myAjaxObject = new XMLHttpRequest();
}
else {
if (window.ActiveXObject) {
myAjaxObject = new ActiveXObject("Microsoft.XMLHTTP");
}
}
}
}
}
}
if (myAjaxObject) {
myAjaxObject.open("POST", dataSource);
myAjaxObject.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
myAjaxObject.onreadystatechange = function () {
if (myAjaxObject.readyState == 4 && myAjaxObject.status == 200) // при загрузке на сервер myAjaxObject.status == 404 !!!
{
var targetObj = document.getElementById('<%=iddiv.ClientID%>');
var t = myAjaxObject.responseText;
var t2 = "";
var s = "";
var f = 0;//флаг
var h = "";
for (i = 0; i < t.length; i++) {
if (t.substr(i, 1) == '$') {
f = 1;
h = "";
}
else {
if (t.substr(i, 1) == '@') {
f = 0;
t2 += "<a href='/Default.aspx?tabid=83&pid=" + h + "'>" + s + "</a></br>";
s = "";
targetObj.style.display = "";
}
else {
if (f == 1)
h += t.substr(i, 1);
else
s += t.substr(i, 1);
}
}
}
targetObj.innerHTML = t2;
}
alert(myAjaxObject.status);
}
myAjaxObject.send("mydata=" + datasend);
}
}
</script>
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td align="center" style="padding:20px;">
<div style="text-align:left;">
<input type="text" name="idinput" style="padding:2px; height:20px; width:500px;" onkeyup ="if(this.form.idinput.value.length != 0){postDataFromServer('getajax.simple','iddiv',this.form.idinput.value)}" /> <asp:Button runat="server" id="btn_search" Text="Найти" Height="30px" Width="60px"/>
<div id="iddiv" runat="server" style="position:absolute; border:solid 1px black; background-color:Window; padding:2px; width:500px; display:none;"></div>
</div>
</td>
</tr>
</table>
MyHandlerAjax.cs, который находится в папке App_Code в корне
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
public class MyHandlerAjax : IHttpHandler
{
bool IHttpHandler.IsReusable
{
get { return true; }
}
void IHttpHandler.ProcessRequest(HttpContext context)
{
HttpRequest Request = context.Request;
HttpResponse Response = context.Response;
string s = string.Empty;
string s1 = string.Empty;
string s2 = string.Empty;
if (Request.Form["mydata"] != null)
{
s = Request.Form["mydata"];
}
if (s.Length > 3)
{
SqlConnection con = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString);
con.Open();
SqlCommand com = new SqlCommand("sql запрос", con);
SqlDataReader reader = com.ExecuteReader();
while (reader.Read())
{
string sName = reader["pname"].ToString();
string sHref = reader["id"].ToString();
s2 += sName.Trim() + "$" + sHref + "@";
}
reader.Close();
con.Close();
}
if (!string.IsNullOrEmpty(s2))
{
Response.Write(s2);
}
}
}
И добавляем обработчик в web.config:
1.
2.
3.
4.
5.
6.
7.
8.
9.
<system.webServer>
....
<handlers>
....
<add name="getajax" verb="*" path="getajax.simple" type="MyHandlerAjax"/>
</handlers>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
<system.web>
Локально - все работает идеально, но после загрузки на сервер дальше этой проверки
1.
if (myAjaxObject.readyState == 4 && myAjaxObject.status == 200)
дело не доходит, т.к. myAjaxObject.status=404.
В чем может быть дело?