powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Использование Ajax
7 сообщений из 7, страница 1 из 1
Использование Ajax
    #37519184
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!
Помогите, пожалуйста, разобраться в следующем примере :
есть 2 страницы, на одной из которых в текстовое поле вводится строка для поиска и с помощью ajax должны выводится строки по текущему вводу в div, что находится чуть ниже на текущей странице. На другой происходит работа с БД.
Default.aspx :
Код: plaintext
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.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<script type="text/javascript" language="javascript">
 xmlhttp = false;
 var requestURL = "dataFetch.aspx?term=";
 
function getNames(currentTerm)
{

    if (currentTerm.length > 0)
    {
        // a proper term has been entered
        var url = requestURL + currentTerm;
 
        getHTTPRequestObject();

        if(xmlhttp)
        {
            xmlhttp.open("GET", url, true);
            xmlhttp.onreadystatechange = callback; 
            xmlhttp.send(null);
        }
    }
    else
    {
        //no search term entered - empty the div
        var findDIV = document.getElementById("divResults")
        findDIV.className = 'hide';
    }  
}

function callback(response)
{
        if(xmlhttp.readyState == 4) 
        {
            if(xmlhttp.status ==200)
            {
                eval("var objResults = " + xmlhttp.responseText);
                
              var displaytext = "";
              
              for (var i=0; i < objResults.Results.shops.length; i++)
              {
                displaytext += objResults.Results.shops[i].Name + "<br>"; 
              }
              if(displaytext.length > 0)
              {
                    var findDIV = document.getElementById("divResults");
                    findDIV.className = 'show';
                    findDIV.innerHTML = displaytext;
              }
                   
            }
        }
}

function getHTTPRequestObject()
{
    try
    {
        // try legacy object first
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
        try
        {
            // try IE implementation now
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(E)
        {
            xmlhttp = false;
        }
    }
    if(!xmlhttp && typeof XMLHttpRequest!= 'undefined')
    {
        // we must be using a mozilla based browser
        // so create a native request object now
        xmlhttp = new XMLHttpRequest();
    }
}
</script>


<head runat="server">
    <title>Summary Application</title>
    <style type="text/css">
    .hide
    {
        display:none;
    }
    .show
    {
        display:block;
        width:230px;
    }
    #divResults
    {
        /* this is
         a comment block! */
        
        background-color:gainsboro;
    
        /* this is a single comment line */
    }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <strong>Adventure Works Store Finder</strong><br />
        <input type="text" id="txtName" autocomplete="off" onkeyup="getNames(this.value);" />    
    </div>
    <div id="divResults"></div>
    </form>
</body>
</html>


dataFetch.aspx.cs
Код: plaintext
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.
public partial class dataFetch : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string searchterm = Request.QueryString["term"];

        SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=AdventureWorks;Integrated Security=SSPI");
        DataTable dtReturn = new DataTable();

        conn.Open();
        // Go get the top 10 store names from AdventureWorks that are like users search criteria
        SqlCommand cmd = new SqlCommand("Select Top 10 Name from sales.store where Name like @searchterm Order By Name", conn);
        SqlParameter param = new SqlParameter();
        param.ParameterName = "@searchterm";
        searchterm.Trim().Replace("'", "''");
        searchterm += "%";
        param.Value = searchterm;
        cmd.Parameters.Add(param);

        SqlDataAdapter adpt = new SqlDataAdapter(cmd);
        adpt.Fill(dtReturn);

        conn.Close();

        //build our JSON string now.
        StringBuilder sb = new StringBuilder();
        sb.Append("{\"Results\": { \"shops\": [");

        for (int i = 0; i < dtReturn.Rows.Count; i++)
        {
            sb.Append("{\"Name\":\"" + (string)dtReturn.Rows[i]["Name"] + "\"}");
            if (i <= (dtReturn.Rows.Count - 2))
            {
                sb.Append(",");
            }
        }

        sb.Append("]}}");

        Response.Write(sb.ToString());

    }
}
Вот такой вот код. Не получается у меня здесь вывести полученные значения из переменной sb в div по имени divResults на странице Default.aspx. Как это сделать?
...
Рейтинг: 0 / 0
Использование Ajax
    #37519211
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erman
Код: plaintext
1.
                eval("var objResults = " + xmlhttp.responseText);
тут с кавычками все нормально?


а вообще подебажьте это дело в firebug
...
Рейтинг: 0 / 0
Использование Ajax
    #37519245
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
навскидку видны 2 проблемы:

1) var url = requestURL + currentTerm; для параметр currentTerm надо кодировать:
var url = requestURL + encodeURIComponent (currentTerm);

2) добавить Response.End(); в конце Page_Load


строка searchterm.Trim().Replace("'", "''"); бесполезна (ничего не делает)
надо searchterm = searchterm.Trim().Replace("'", "''");, причем сильно сомневаюсь в необходимости Replace("'", "''")
...
Рейтинг: 0 / 0
Использование Ajax
    #37519273
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вместо значений в div выводится undefined то количество раз, сколько элементов нашлось.
Переменная sb заполняется нужными значениями.
...
Рейтинг: 0 / 0
Использование Ajax
    #37519318
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Использование Ajax
    #37522450
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример бесполезен, у меня фактически тоже самое.
...
Рейтинг: 0 / 0
Использование Ajax
    #37522543
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ermanу меня фактически тоже самое.
как это ????


у Вас жеermanВместо значений в div выводится undefined то количество раз, сколько элементов нашлосьа у меня выводится строка из responseText, что и требовалось Вам

Поэтому пример полезен, Вы просто не смогли пока его понять
Перечитайте пример еще раз, может поймете...
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Использование Ajax
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]