Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Использование Ajax / 7 сообщений из 7, страница 1 из 1
09.11.2011, 22:09:12
    #37519184
erman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Ajax
Добрый вечер!
Помогите, пожалуйста, разобраться в следующем примере :
есть 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
09.11.2011, 22:26:33
    #37519211
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Ajax
erman
Код: plaintext
1.
                eval("var objResults = " + xmlhttp.responseText);
тут с кавычками все нормально?


а вообще подебажьте это дело в firebug
...
Рейтинг: 0 / 0
09.11.2011, 22:59:30
    #37519245
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Ajax
навскидку видны 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
09.11.2011, 23:44:00
    #37519273
erman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Ajax
Вместо значений в div выводится undefined то количество раз, сколько элементов нашлось.
Переменная sb заполняется нужными значениями.
...
Рейтинг: 0 / 0
10.11.2011, 00:58:00
    #37519318
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Ajax
...
Рейтинг: 0 / 0
11.11.2011, 15:49:20
    #37522450
erman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Ajax
Пример бесполезен, у меня фактически тоже самое.
...
Рейтинг: 0 / 0
11.11.2011, 16:19:51
    #37522543
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Ajax
ermanу меня фактически тоже самое.
как это ????


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

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


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