Autor | Zpráva | ||
---|---|---|---|
kuba123 Profil * |
#1 · Zasláno: 20. 6. 2013, 12:23:36 · Upravil/a: kuba123
Zkouším rozjet nějaký starší skript s AJAXEM. Mám tam navigaci s odkazama, na který když kliknu tak se mi načtou do formuláře data z příslušného záznamu. Ale nějak to nefunguje jak by mělo, tak zkouším firebug a dívám se na kartu síť jestli tam něco nenajdu, ale nemohu přijít na to jak vlastně zjistím jaký výstup to php-čko odeslalo, myslím tím ten soubor, který odpovídal na požadavek ajaxu. Cu musím udělat?
Už jsem to tam našel. Sice nevím co je XHR, ale našel jsem to pod kartou XHR, a po rozbalení požadavku jsem klikl na Post, Odezva nebo HTML. Ale vzpomínám si, že jsem to kdysi dělal tak, že se mi to normálně zobrazilo v okně prohlížeče a na to si teda nevzpomínám jak bych to udělal. Připomene mi to někdo? |
||
peta Profil |
#2 · Zasláno: 20. 6. 2013, 12:38:41
XHR = (xml) http request, ajax odesila XHR
|
||
kuba123 Profil * |
#3 · Zasláno: 20. 6. 2013, 13:54:18 · Upravil/a: kuba123
Ještě dotaz na toto - zde mám řádek v ajaxu:
$args->post['selects'] = json_decode(stripslashes($_POST['selects'])); Prvek na který klikám obsahuje tento javascript: <a class="next" onclick="$.post("ax.php?action=get&next=1", { rid: $("textarea#id").val(), selects: JSON.stringify(getSelected()) } , function(result) { loadFormData(result); }, "json");;return false;" href="localhost" accesskey="w">Load next row!</a> A část kódu v JS: var getSelected = function(){ var order_columns = $("input[name=all_columns]").val(); var obj = { "order" : {} , "filter" : {} }; |
||
peta Profil |
$_POST['selects'] v php
<input name='selects' value='123'> v html (nebo jiny formularovy prvek, select, radio, check, submit, hidden...)
div#select v css
<div id='select'></div> v html
select a selects je dost rozdil js - ten kousek kodu nejspis s problemem vubec nesouvisi, tam zadny 'selects' neni Udelej si print_r($_POST) nebo var_dump($_POST) a uvidis jake indexy jsou v poli $_POST definovane, existujici. Je mozne, ze se pokousis pracovat z promennou v $_POST, ikdyz nebyl zatim odeslany zadny formular nebo ajax post pozadavek. |
||
kuba123 Profil * |
#5 · Zasláno: 20. 6. 2013, 14:27:36 · Upravil/a: kuba123
peta:
Ale já si myslím, že právě souvisí. Podívej se na ten první kód s ajaxem, který je v tagu a. Tam je objekt, vytvořený pomocí Jquery a ten obsahuje atribut selects. Ten atribut selects se nastavuje pomocí funkce JSON.stringify(getSelected()) čili (domnívám se) že nejdříve getSelected() vrátí objekt ve kterém jsou obsaženy hodnoty vybraných voleb selektů. stringify to převede na JSON. Je to už dlouho co jsem ten script psal a bylo to poprvé co jsem se zabýval AJAXEM. Tak já si myslím, že by to POST["selects"] asi mělo obsahovat ten json ... snad? Celkem by mohlo jít o 2 až 8 hodnot, protože ve formuláři mám 8 selectů. Ten ajax požadavek jsem právě odesílal, kontroluju to přes firebug. Dostávám hlášky, že argumenty filter_1 a order_1 (to jsou označení pro ty selecty) nejsou nastavené, hlavně teda v XHR je ta informace že POST["selects"] není nastaveno Jak bych mohl v JS ověřit jestli getSelected() něco vrací? nějaký objekt. |
||
peta Profil |
Jo, aha, dobre. Tak ta funkce nema zadny return. Aspon ta cast, protoze podle zavorek to neni cele.
<script> var getSelected = function() { var order_columns = $("input[name=all_columns]").val(); var obj = { "order" : {} , "filter" : {} }; return 123; } </script> --- Si tam dej klidne pred request nejdriv alert(getSelected()) nebo alert(getSelected().toSource()), abys videl, co ta funkce vraci, co predavas ajaxu. |
||
kuba123 Profil * |
#7 · Zasláno: 20. 6. 2013, 14:36:33 · Upravil/a: kuba123
Jo aha, tak to jsem špatně zkopíroval. Zde je celá funkce:
var getSelected = function(){ var order_columns = $("input[name=all_columns]").val(); // názvy sloupců získat ze skrytého pole var obj = { "order" : {} , "filter" : {} }; $("select option:selected").each( function(index, option_selected) { var select_name = $(option_selected).parent().attr("name"); var value = $(option_selected).val(); var col_name; var regex; var col; if (select_name.substring(0, 6) == "filter") { // zde se název sloupce musí získat z pole v $config->options, protože znám pouze číslo option col_name = select_name.substring(7,select_name.length); regex = new RegExp("[a-z]\.`"+col_name+"`","g"); col = order_columns.match(regex); if (col) obj["filter"][select_name] = { "col": col[0], "val": value, "col_name": col_name}; } else { // zde je název sloupce uložený pod hodnotou tagu option regex = new RegExp("[a-z]\.`"+value+"`","g"); col = order_columns.match(regex); if (col) obj["order"][select_name] = { "col": col[0], "val": value, "col_name": col_name }; } } ); return obj; } Po paměti hádám, že obj by měl obsahovat vybrané hodnoty selektů order_1 až order_4 a filter_1 až filter_2. Ale rád bych si to nějak prohlédl a to už si nepamatuju jak se dělá. ZNOVA! var getSelected = function(){ var order_columns = $("input[name=all_columns]").val(); // názvy sloupců získat ze skrytého pole var obj = { "order" : {} , "filter" : {} }; $("select option:selected").each( function(index, option_selected) { var select_name = $(option_selected).parent().attr("name"); var value = $(option_selected).val(); var col_name; var regex; var col; if (select_name.substring(0, 6) == "filter") { // zde se název sloupce musí získat z pole v $config->options, protože znám pouze číslo option col_name = select_name.substring(7,select_name.length); regex = new RegExp("[a-z]\.`"+col_name+"`","g"); col = order_columns.match(regex); if (col) obj["filter"][select_name] = { "col": col[0], "val": value, "col_name": col_name}; } else { // zde je název sloupce uložený pod hodnotou tagu option regex = new RegExp("[a-z]\.`"+value+"`","g"); col = order_columns.match(regex); if (col) obj["order"][select_name] = { "col": col[0], "val": value, "col_name": col_name }; } } ); return obj; } Sory že jsem to tu vložil dvakrát, já zas myslel že se to nepovedlo celé vložit... |
||
peta Profil |
mno, a kdyz pred radek 34 vlozis
alert(getSelected()); alert(getSelected().toSource()); |
||
kuba123 Profil * |
#9 · Zasláno: 20. 6. 2013, 15:25:36 · Upravil/a: kuba123
peta
To nemusím zkoušet, když vím, že alert zobrazí Objekt ale žádná data. Marně se pokouším vzpomenout jak se to dělá pomocí firebugu, když chci zobrazit objekt. Tedy vypsat strukturu objektu i s daty. |
||
peta Profil |
#10 · Zasláno: 20. 6. 2013, 15:30:27
kuba123: FF zobrazi objekt pomoci
alert(getSelected().toSource()); . Nevim, proc ti to vlastne pisi, kdyz to nechces zkouset. On se da napsat i for cyklus for (i in obj) ...
|
||
kuba123 Profil * |
#11 · Zasláno: 20. 6. 2013, 15:34:59 · Upravil/a: kuba123
peta:
Protože na to existuje příkaz ve firebugu přímo, zkusím zagooglovat Už to mám http://getfirebug.com/wiki/index.php/Console_API Tak je to objekt který obsahuje dva atributy. Jeden je filter a druhý je order. order neobsahuje nic a filter obsahuje další poctivě vyplněné objekty... Ten JSON.Stringify(getSelected) tedy odesílá tento string: {"order":{},"filter":{"filter_cat":{"col":"a.`cat`","val":"#","col_name":"cat"},"filter_diffHe":{"col":"a.`diffHe`","val":"#","col_name":"diffHe"},"filter_diffShe":{"col":"a.`diffShe`","val":"#","col_name":"diffShe"},"filter_g-bod":{"col":"a.`g-bod`","val":"#","col_name":"g-bod"}}} Myslím si, že by tedy tento string měl dorazit na server. Spolu s ním je odesílán také argument RID (značí Row number) a ted tam dorazil. Tak nechápu proč string s objektem ne. Parametry vrácené v kartě XHR - post: filter_1 undefined order_1 undefined rid 1 |
||
Časová prodleva: 11 let
|
0