ASP.Net - jQuery autocomplete + JSON

ASP.Net - jQuery autocomplete + JSON
2011-10-28T13:51:59+02:00
2011-11-08T10:45:20+01:00
2022-11-23T15:15:35+01:00
DonDani
Sziasztok!

Szeretnék betenni az oldalamra egy globális keresőt, amit sok adatbázisban keres, óriási mennyiségű adatban. És ami fontos, hogy szeretnék autocompletet társítani hozzá. A célra a jQuery UI autocomplete-jét szemeltem ki, mert már többször használtam sikeresen.

Most azonban elakadtam, mert nem tudok JSON adattal dolgozni. az autocomplete példakódjában van egy sor, ahol azt adom meg, milyen url-ről szívja be az adatokat:
url: "http://ws.geonames.org/searchJSON"

Nyilván ezt kellene átirányítani valahogyan az én adataimra.

Ameddig eljutottam: (valaki erősítsen meg, hogy jó amit csináltam)

Letöltöttem és hozzáadtam referenciaként a projectemhez a következőket: Newtonsoft.Json.dll, Newtonsoft.Json.pdb, Newtonsoft.Json.xml

Próbálkoztam a JSON adatokat "kézzel" előállítani, valahogy így: (csak példa kód)


dReader = SqlCom.ExecuteReader() JSONdata = "[" If dReader.HasRows = True Then While dReader.Read() cikkszam = dReader.Item(0).ToString() termek_leiras = dReader.Item(1).ToString() JSONdata = JSONdata + "{cikkszam: " + Chr(34) + cikkszam + Chr(34) + " leiras: " + Chr(34) + termek_leiras + Chr(34) + "}," End While End If JSONdata = JSONdata + "]"

Annyit azért én is érzek, hogy nem így kéne, de valoaki segíthetne, hogyan kell hatékonyan és gyorsan JSON-ba átkonvertálni adatokat, és hogyan tudom azt egy url formájában átadni az autocompletenek.

Előre is köszönöm!
Mutasd a teljes hozzászólást!
Hát, ezek kicsit mélyebb témák.
Az ORM (Object-Relational Mapping) a relációs adatbázis tábláit képzi le objektum orientált módon entitásokba, és igazából ennél sokkal többet is tesz.

Vegyünk egy nagyon egyszerű példát: van adatbázisod blog bejegyzések számára. Két táblát használsz, a Categories táblában a rovatok, a Posts táblába a bejegyzések vannak:

Categories:
CategoryID | CategoryName ------------------------- 1 | Foo 2 | Bar [b]Blogs[/b]: BlogID | CategoryID | Title --------------------------- 1 | 1 | Cím1 2 | 1 | Cím2 3 | 2 | Cím3

A két tábla közötti reláció teljesen egyértelmű. A tábláknak létrehozhatsz egy-egy osztályt, a relációkat pedig kifejezheted navigációs propertykkel.

public class Category { //a tulajdonságok megfelelnek a tábla oszlopainak public int CategoryID { get; set; } public string CategoryName { get; set; } //navigációs property (tobb post egy bejegyzésben) public List<Post> Posts { get; set; } } public class Post { //a tulajdonságok megfelelnek a tábla oszlopainak public int PostID { get; set; } public int CategoryID { get; set; } public string Title { get; set; } //navigációs property (minde postnak pontosan egy categoryja van) public Category Category { get; set; } }

Amikor lekérdezel egy Postot SQL-ből, akkor az objektum orientált nyelvedben létrehozol a lejött adatokból egy Post objektumot, és a későbbiekben már ezzel az erősen típusos szép osztállyal dolgozol. Amikor egy új post születik, akkor a Repositoryd egy Post példányt vár paraméterül, és ez alapján írod meg az INSERT statementet. A lényeg az, hogy így CLR objektumokkal dolgozol a kódban, ami egy OOP nyelvben sokkal kényelmesebb. Az adatelérési rétegedben pedig a szükséges mappolásokat elvégzed. Ezt a mappolást, és az entitás osztályok legyártását segítik az ORM-ek (többek között). A Microsoft hivatalos ORM megoldása az Entity Framework. A jó oldala az EF-nek, hogy nagyon hamar bele lehet jönni az alapjaiba, a kezdéshez rengeteg tutorialt találsz a neten. Gyakorlatilag egy sor T-SQL nélkül megírhatsz egy relációs adatbázisra épülő programot EF segítségével. Persze lasabb mint a natív SQL kód, de egyelőre ezzel ne foglalkozz.

A fenti kódból ugyan nem derül ki a táblaszerkezeted, és a lekérdezésed amit használsz, de elképzelhető, hogy ennyivel megúsznád a teljes adatelérést és feldoglozást:


using (MyContext context = new MyContext()) { List<Termek> termekek = context.Termekek.ToList(); JavaScriptSerializer serializer = new JavaScriptSerializer(); return serializer.Serialize(termekek); }

DE!

Valószínű, hogy neked most elég ez a string építős megoldás is, nincs ezzel semmi komoly baj. Írsz egy WebMethodot ami visszatér egy stringgel, beleteszed a stringépítős kódodat, és visszatérsz a JSON-nel. Kliens oldalon egy AJAX kérést küldesz a WebMethod felé, ő visszadja JSON-ben az adatokat, amiket aztán megjelenítesz jQuery tempaltettel mondjuk.
Mutasd a teljes hozzászólást!

  • JSON stringet a System.Web.Extensions.dll-ben lévő System.Web.Script.Serialization.JavaScriptSerializer típus is tud, meglehetősen egyszerűen:

    Az egyedi típusom:
    public class MyClass { public int ID { get; set; } public string Name { get; set; } }

    És itt használom a serializert:
    List<MyClass> tss = new List<MyClass>() { new MyClass(){ ID = 1, Name = "Egy" }, new MyClass(){ ID = 2, Name = "Kettő"} }; var serializer = new JavaScriptSerializer(); string json = serializer.Serialize(tss); Response.Write(json); //kimeneten: [{"ID":1,"Name":"Egy"},{"ID":2,"Name":"Kettő"}]

    Erre gondoltál?


    Jajj! Most látom, hogy neked holt nyelven kell, mindjárt átalakítom!

    Nos, ez így néz ki arámiul, ha igaz:


    Dim tss As New List(Of [MyClass])() From { _ New [MyClass]() With { _ Key .ID = 1, _ Key .Name = "Egy" _ }, _ New [MyClass]() With { _ Key .ID = 2, _ Key .Name = "Kettő" _ } _ } Dim serializer = New JavaScriptSerializer() Dim json As String = serializer.Serialize(tss) Response.Write(json) 'kimeneten: [{"ID":1,"Name":"Egy"},{"ID":2,"Name":"Kettő"}]

    A lényegen nem változtat. Az eredmény egy string, amivel a webmethod visszatérhet, az ajax pedig boldog, ettől te is, mindenki boldog!
    Mutasd a teljes hozzászólást!
  • Segíteni segítettél, csak az ismereteimmel van még baj :) Kifejtenéd ezt a részt?


    public class MyClass { public int ID { get; set; } public string Name { get; set; } }

    És hogyan társítom mondjuk az általad írt Name változóhoz az adatbázisból kiolvasott értéket? Az nem baj, hogy nem ugyanolyan a típusuk?

    Bocs ha hülyeséget kérdezek... :)
    Mutasd a teljes hozzászólást!
  • Miért mondod, hogy holt nyelven? Mi a baj vele?
    Mutasd a teljes hozzászólást!
  • Na, hát van itt még probléma látom : D

    Én most azt mutattam meg, hogyan kell egy általános CLR-beli típust sorosítani JSON stringre, innentől a határ a csillagos ég. Neked most az a problémád, hogy végrehajtasz egy SQL Commandot a klasszikus ado.net-es megoldással, ami egy SqlDataReaderrel tér vissza, és ezt nem tudod összeegyeztetni, pedig egyszerű :)

    Ahogy látom, a rekordjaid egy int-ből és egy string-ből épülnek fel. Létrehozhatsz egy entitás típust, amit megfeleltetsz a rekordjaiddal:

    public class MyOldPlainCLRObject { //a tulajdonságok megfelelnek a lekérdezés oszlopaival public int CikkSzam { get; set; } public string TermekLeiras { get; set; } //ctor a kényelmesebb használatért public MyOldPlainCLRObject(int cikkSzam, string termekLeiras) { CikkSzam = cikkSzam; TermekLeiras = termekLeiras; } }

    Ezek után a feldolgozást kicsit átalakítod:
    //Itt tároljuk a lekérdezés eredményét majd List<MyOldPlainCLRObject> records = new List<MyOldPlainCLRObject>(); while (reader.Read()) //végig iterálsz az eredményhalmazon { var record = new MyOldPlainCLRObject(Convert.ToInt32(reader[0]), reader[1].ToString()); //és létrehozod a rekord alapján az osztályod példányait records.Add(record); //hozzáadod a listádhoz } JavaScriptSerializer serializer = new JavaScriptSerializer(); string json = serializer.Serialize(records); //sorosítod a listádat

    Alapvetően azt javaslom, hogy használj valamilyen ORM-et, pl EntityFrameworkot, sokat segít. Az SqlCommandos megoldásnál teljesen felelsleges még létrehozni egy listát, közvetlenül te is megalkothatod a stringedet.

    Egyébként, mekkora gond, hogy C#-ban írom a válaszokat? :)

    hogyan tudom azt egy url formájában átadni az autocompletenek


    Egyébként URL formában nem tudod átadni a sok infot. Az URL csak egy WebMethodra, valamilyen WebService-re mutat, ami visszatér a te JSON stringeddel. Erre használod az AJAX kérést, hogy szép asszinkron módon érd el. Ez világos?

    Miért mondod, hogy holt nyelven? Mi a baj vele?

    Mert nem szeretem a VB-t, és nem értem, miért használ egyáltalán bárki is egy ilyen csúnya szintaktikájú nyelvet, vagyis teljesen szubjektív vélemény. Használj C#-ot :)
    Mutasd a teljes hozzászólást!
  • Hát, az az igazság, hogy bár én is bánom, de a C#-hoz nem értek. És igen, ki lehet nevetni, de nem tiszta teljesen, amit írsz. Nem botlottam még ezekbe a fogalmakba (ORM, EntityFramework), és nem látom át eléggé azt, amit írsz.

    Ha el tudod magyarázni egy kicsit "alacsonyabb" szinten, hogy mi itt a lényeg, azt megköszönöm, de ha nem akarod, azt is megértem. Majd képezem magam.
    Mutasd a teljes hozzászólást!
  • Hát, ezek kicsit mélyebb témák.
    Az ORM (Object-Relational Mapping) a relációs adatbázis tábláit képzi le objektum orientált módon entitásokba, és igazából ennél sokkal többet is tesz.

    Vegyünk egy nagyon egyszerű példát: van adatbázisod blog bejegyzések számára. Két táblát használsz, a Categories táblában a rovatok, a Posts táblába a bejegyzések vannak:

    Categories:
    CategoryID | CategoryName ------------------------- 1 | Foo 2 | Bar [b]Blogs[/b]: BlogID | CategoryID | Title --------------------------- 1 | 1 | Cím1 2 | 1 | Cím2 3 | 2 | Cím3

    A két tábla közötti reláció teljesen egyértelmű. A tábláknak létrehozhatsz egy-egy osztályt, a relációkat pedig kifejezheted navigációs propertykkel.

    public class Category { //a tulajdonságok megfelelnek a tábla oszlopainak public int CategoryID { get; set; } public string CategoryName { get; set; } //navigációs property (tobb post egy bejegyzésben) public List<Post> Posts { get; set; } } public class Post { //a tulajdonságok megfelelnek a tábla oszlopainak public int PostID { get; set; } public int CategoryID { get; set; } public string Title { get; set; } //navigációs property (minde postnak pontosan egy categoryja van) public Category Category { get; set; } }

    Amikor lekérdezel egy Postot SQL-ből, akkor az objektum orientált nyelvedben létrehozol a lejött adatokból egy Post objektumot, és a későbbiekben már ezzel az erősen típusos szép osztállyal dolgozol. Amikor egy új post születik, akkor a Repositoryd egy Post példányt vár paraméterül, és ez alapján írod meg az INSERT statementet. A lényeg az, hogy így CLR objektumokkal dolgozol a kódban, ami egy OOP nyelvben sokkal kényelmesebb. Az adatelérési rétegedben pedig a szükséges mappolásokat elvégzed. Ezt a mappolást, és az entitás osztályok legyártását segítik az ORM-ek (többek között). A Microsoft hivatalos ORM megoldása az Entity Framework. A jó oldala az EF-nek, hogy nagyon hamar bele lehet jönni az alapjaiba, a kezdéshez rengeteg tutorialt találsz a neten. Gyakorlatilag egy sor T-SQL nélkül megírhatsz egy relációs adatbázisra épülő programot EF segítségével. Persze lasabb mint a natív SQL kód, de egyelőre ezzel ne foglalkozz.

    A fenti kódból ugyan nem derül ki a táblaszerkezeted, és a lekérdezésed amit használsz, de elképzelhető, hogy ennyivel megúsznád a teljes adatelérést és feldoglozást:


    using (MyContext context = new MyContext()) { List<Termek> termekek = context.Termekek.ToList(); JavaScriptSerializer serializer = new JavaScriptSerializer(); return serializer.Serialize(termekek); }

    DE!

    Valószínű, hogy neked most elég ez a string építős megoldás is, nincs ezzel semmi komoly baj. Írsz egy WebMethodot ami visszatér egy stringgel, beleteszed a stringépítős kódodat, és visszatérsz a JSON-nel. Kliens oldalon egy AJAX kérést küldesz a WebMethod felé, ő visszadja JSON-ben az adatokat, amiket aztán megjelenítesz jQuery tempaltettel mondjuk.
    Mutasd a teljes hozzászólást!
  • Nagyon szépen köszönöm a kimerítő választ! Ez valóban kicsit mélyebb témának tűnik, de nem baj, legalább nem érzem magam annyira bénának :) Ez a téma még igényel utánajárást, így most szerintem maradok a string építős megoldásnál. De amit írtál, azt lementettem és még biztosan előveszem majd.

    Akkor induljunk ki abból, hogy egy "klasszikus ado.net-es sql lekérdezésből" előállítottam a JSON típusú adatot. De hogyan írom meg a Webmethodot? Az ajax kérés már bele van építve az autocompletebe, tehát gondolom azzal nem kell most törődnöm.
    Mutasd a teljes hozzászólást!
  • Na!

    A metódusod stringgel tér vissza, annyi a dolgod, hogy dekorálod egy WebMethod attribútummal, és később a jQuery AJAX kérésednél add meg a metódus nevét is:

    Itt van a metódusod, az elején a WebMethod attrbute-tal
    VB:
    <WebMethod> _ Public Function MyMethod() As String Return "MyJSONString" End Function
    C#
    [WebMethod] public string MyMethod() { return "MyJSONString"; }

    Ezek után a jQuery ajax kérésed valahogy így néz ki:

    $.ajax({ type: "POST", url: [b]"MyPage.aspx/MyMethod"[/b], data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: function(msg) { // a válasz az msd.d-ben található, már csak meg kell jelenítened :) } });

    See?:)
    Mutasd a teljes hozzászólást!
  • Sajnos az elmút pár napban nem volt időm ezzel foglalkozni, de most már közel járok a megoldáshoz úgy érzem :)

    Megírtam a webmethodot, de az egyik sornál hiba van.

    A webmethodot beraktam egy saját osztályba:


    Public Class ajaxJson Inherits System.Web.Services.WebService <System.Web.services.WebMethod(CacheDuration:=60)> _ Public Function CreateJsonForAutocomplete() As String ................... Dim hiddenGlobalSearchData As HiddenField hiddenGlobalSearchData = CType(masterLoginView.FindControl("hiddenGlobalSearchData"), HiddenField) ...................... Return JSONdata End Function

    A probléma az, hogy nem találja a LoginView-emet az oldalon, mert ugye másik osztályban van. Hogyan tudom "innen" elérni?
    Mutasd a teljes hozzászólást!
  • A WebMethodod tedd az *.aspx file-od codebehind file-jába, hogy elérd a lap server oldali controljait.
    Mutasd a teljes hozzászólást!
  • Ott van elhelyezve, így:


    Partial Class Site Inherits System.Web.UI.MasterPage End Class Public Class ajaxJson End Class
    Mutasd a teljes hozzászólást!
  • Átírtam így, így jó?


    Partial Class Site Inherits System.Web.UI.MasterPage ............. Public Class ajaxJson Inherits System.Web.Services.WebService Dim masterLoginView as New loginView ............ End CLass End CLass
    Mutasd a teljes hozzászólást!
  • Valamiért tökéletesen immunis vagyok a VB kód értelmezésére, úgyhogy először átalakítom C#-ra, és megnézem, mindenesetre látok egy MasterPage-et, amiről eddig em volt szó. A MP-k bekavarhatnak, attól függően, hogy az adott kontrol hol van és honnan akarod elérni, célszerű lehet erősen típusos MP-t használni, de mindjárt tüzetesebben megnézem a kódod.

    Na, akkor egyelőre hagyjuk ki a számításból a WebMethodot, és nézzük miért nem éred el a controlodat.

    Hol van a kontrol? MasterPage-en, vagy egy formon?
    Honnan próbálod elérni a kontrolt? MP, vagy form?

    Ha ott próbálod elérni, ahol a control is van, akkor egyszerűen az ID-ja alapján eléred.

    A többi eset nem ennyire triviális. Tehát?
    Mutasd a teljes hozzászólást!
  • Köszönöm!
    Mutasd a teljes hozzászólást!
  • Tehát? :)
    Mutasd a teljes hozzászólást!
  • Kis türelmet! Sikerült addig próbálkoznom, amíg valamivel kinyírtam a szervert, mert most System.OutOfMemoryException-t dob, és nem reagál semmire.
    Mutasd a teljes hozzászólást!
  • Szóval!

    Van egy masterpage-m, azon egy loginview, és azon belül egy textbox. Erre a textboxra szeretnék ráhúzni egy autocompletet úgy, hogy ne töltsön hosszú másodpercekig az oldal minden egyes betöltésnél a nagy mennyiségű adat miatt. Itt jön a képbe az ajax.

    Írtam egy webmethodot a masterpage codefile-jába, külön(!) class-ba.

    most az a probléma, hogy itt:


    hiddenGlobalSearchData = CType(masterLoginView.FindControl("hiddenGlobalSearchData"), HiddenField)

    nem találja a LoginView-ot. Ezt hogyan kell áthidalni?
    Mutasd a teljes hozzászólást!
  • Szerintem így a legegyszerűbb:
    A Webservice-t jelöld meg a ScriptService attribútummal, ez alapból automatikusan JSON-t használ.

    Itt egy példa JQuery UI autocomplete-ra:

    WS

    [ScriptService] public class AdatlapService : WebService { [WebMethod] public string[] VarosComplete(string word) { string[] words; //szavak listajat feltoltod return words; } }

    JS


    $(".varos").autocomplete({ source: function(request, response) { $.ajax({ url: 'AdatlapService.asmx/VarosComplete', data: "{ 'word': '" + request.term + "' }", dataType: "json", type: "POST", contentType: "application/json; charset=utf-8", success: function(data) { response(data); error: function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); } });
    Mutasd a teljes hozzászólást!
  • Próbálom
    Mutasd a teljes hozzászólást!
  • Na most megint összezavarodtam...

    A te kódodból lesve hozzáadtam a projekthez egy Web Service fájlt, és a VS létrehozott egy Webservice.asmx fájlt, és egy Webservice.vb fájlt teljesen külön az App_Code mappában.

    A tartalma:


    Imports System.Web Imports System.Web.Services Imports System.Web.Services.Protocols <System.Web.Script.Services.ScriptService()> _ <WebService(Namespace:="http://tempuri.org/")> _ <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Public Class WebService Inherits System.Web.Services.WebService <WebMethod()> _ Public Function HelloWorld() As String Return "Hello World" End Function End Class

    Gondoltam először megpróbálom meghívni a példa HelloWorld methodot, de nem megy. Hogyan kell meghívni? Ne haragudjatok a bénaságom miatt, de ez még új terület nekem
    Mutasd a teljes hozzászólást!
  • A hozzászólásomban a Js kód meg tudja hívni a Webservice-t, csak az url-t csereled le, ebben az esetben WebService.asmx/HelloWorld-re. Viszont ha az autocomplete-al teszteled, akkor legyen egy string paramétere a HelloWorld-nek (a szótöredék, amit az autocomplete ad át), és a visszatérési értéke legyen string tömb.

    Ha böngészőben nézed meg a WebService.asmx-et tudod tesztelni a Webservice-edet, de igazából az a cél, hogy JQuery-ből működjön.
    Mutasd a teljes hozzászólást!
  • Van a gyökérkönyvtárban egy WebService.asmx fájlom.

    A kód része:


    Imports System.Web Imports System.Web.Services Imports System.Web.Services.Protocols Imports MySql.Data.MySqlClient Imports System.Web.Script.Serialization <System.Web.Script.Services.ScriptService()> _ <WebService(Namespace:="AZ OLDAL TELJES ELÉRÉSI ÚTJA")> _ <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Public Class WebService Inherits System.Web.Services.WebService <WebMethod()> _ Public Function HelloWorld() As String Return "Hello World" End Function <WebMethod()> _ Public Function GlobalSearch() As String Dim SqlCon As New MySqlConnection Dim SqlCom As New MySqlCommand Dim dReader As MySqlDataReader Dim cikkszam As String Dim termek_leiras As String Dim JSONdata As String Dim serializer As New JavaScriptSerializer Try SqlCon.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings("..........").ToString() SqlCom.Connection = SqlCon SqlCom.CommandText = "SELECT cikkszam, termek_leiras FROM termekek_hu" SqlCon.Open() dReader = SqlCom.ExecuteReader() JSONdata = "[" If dReader.HasRows = True Then While dReader.Read() cikkszam = dReader.Item(0).ToString() termek_leiras = dReader.Item(1).ToString() JSONdata = JSONdata + "{cikkszam: " + Chr(34) + cikkszam + Chr(34) + " leiras: " + Chr(34) + termek_leiras + Chr(34) + "}," End While End If JSONdata = JSONdata + "]" JSONdata = serializer.Serialize(JSONdata) dReader.Close() SqlCon.Close() Catch ex As Exception End Try Return JSONdata End Function End Class

    A master.pagemen pedig ez a javascript kód az autocompletera:


    <script type="text/javascript"> $("#masterLoginView_txtGlobalSearch").autocomplete({ source: function(request, response) { $.ajax({ url: 'WebService.asmx/GlobalSearch', data: "{ 'cikkszam': '" + request.term + " 'leiras': '" + request.term + "' }", dataType: "json", type: "POST", contentType: "application/json; charset=utf-8", success: function(data) { response(data); error: function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); } }); </script>


    Mégsem működik a dolog. Meg tudnád mondani, hol rontom el?
    Mutasd a teljes hozzászólást!
  • Na, nem kell ám neked egy teljes webservice-t írnod. A WebMethod attributum lényege az, hogy egy mezei metódust ruházol fel vagány képességekkel.

    Lehetőséged van egy asmx WebService-t létrehoznod, vagy még inkább egy WCF service-t (*.svc), de az ennél valamivel bonyolultabb.

    Elegendő a CodeBehind fileodban (*.aspx.cs; *.aspx.vb) létrehoznod a metódusodat, és azt feldekorálni a WebMethod attributummal, majd az AJAX requestet az aspx-es lapod felé küldöd, annyi különbséggel, hogy a *.aspx után megadod per jellel a WebMethodot nevét.

    Default.aspx/MyWebMethod formában. A 2011.10.28. 16:14 küldött postomban is ezt írtam. Ezzel a megodlással kliens oldalon megkapod az adatokat.

    public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } [WebMethod] public string MyWebMethod() { return "Hello World!"; } }
    Mutasd a teljes hozzászólást!
  • Megmondani így látatlanban nehéz, elvileg szerintem most jól csinálod. Amit meg lehetne nézni:

    Rakj fel Fiddlert, és látnod kellene hogy az autocomplete bizonyos időközönként lekérdezi a webservice-t. Ha nem akkor nézd át a javascript-et, jó-e a selectorod, stb...

    Ha igen, Fiddler-ben látod eléri-e a ws-t. Ha igen, akkor akár
    a ws-en belülre is rakhatsz breakpoint-ot...

    Elsőre ennyi ötletem van.
    Mutasd a teljes hozzászólást!
  • Jobban átolvasva azért van pár dolog:

    data: "{ 'cikkszam': '" + request.term + " 'leiras': '" + request.term + "' }"
    - ez így nem sehogy nem jó.

    Legyen 1 paramétere a WebMethod-nak pl. cikkszam

    és akkor:
    data: "{ 'cikkszam': '" + request.term + "' }"

    És a WebMethod-nak is legyen egy ugyanilyen nevű paramétere plusz String tömbbel térjen vissza.
    Mutasd a teljes hozzászólást!
  • Nem akar működni
    Mutasd a teljes hozzászólást!
  • Fiddler-rel mit látsz?
    Mutasd a teljes hozzászólást!
  • Mindent látok, csak azt nem, amit szeretnék. Hol lehet megnézni azt, hogy a szkript eléri-e a webscriptet?
    Mutasd a teljes hozzászólást!
  • Ha az AJAX forgalmat akarod látni, akkor chrome CTRL+SHIFT+J
    Ott a network, és akkor szépen látszik, hogy ki mit küld és kap.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd