| Autor | Zpráva | ||
|---|---|---|---|
| jirkass Profil * |
#1 · Zasláno: 17. 3. 2013, 15:58:56
Potřebuji poslat vícenásobný výběr v selectu: Jak jsem se dočetl na jakpsatweb.cz, v tom případě se nepředávají hodnoty, čili zbývá asi jen utilita selectable v jquery, konkrétně standardní provedení serialize, které zobrazuje výčet provedených výběrů. Tohle na stránce rozběhnu, jenže jakékoli další pokusy ty konkrétní výběry poslat do php proměnné, kde s nima musím dál manipulovat nejsem schopen rozběhnout. Konkrétně sem pastnu zdrojový kód z manuálu
<script>
$(function() {
$( "#selectable" ).selectable({
stop: function() {
var result = $( "#select-result" ).empty();
$( ".ui-selected", this ).each(function() {
var index = $( "#selectable li" ).index( this );
result.append( " #" + ( index + 1 ) );
});
}
});
});
</script>
</head>
<body>
<p id="feedback">
<span>You've selected:</span> <span id="select-result">none</span>.
</p>
<ol id="selectable">
<li class="ui-widget-content">Item 1</li>
<li class="ui-widget-content">Item 2</li>
<li class="ui-widget-content">Item 3</li>
<li class="ui-widget-content">Item 4</li>
<li class="ui-widget-content">Item 5</li>
<li class="ui-widget-content">Item 6</li>
</ol> |
||
| Chamurappi Profil |
#2 · Zasláno: 17. 3. 2013, 16:26:32
Reaguji na jirkasse:
„Jak jsem se dočetl na jakpsatweb.cz, v tom případě se nepředávají hodnoty“ Cože? Proč? Kde? Odkaz? |
||
| jirkass Profil * |
#3 · Zasláno: 17. 3. 2013, 16:40:04
Formuláře » select
-2.řádek v tabulce |
||
| preca1 Profil |
#4 · Zasláno: 17. 3. 2013, 17:00:07
Tos to špatně pochopil. Bez hodnoty je onen atribut.
|
||
| Davex Profil |
#5 · Zasláno: 17. 3. 2013, 17:03:27
jirkass:
V té tabulce je výpis atributů HTML elementu <select> s možnými hodnotami a multiple se zapisuje bez hodnoty.
<select name="vyber[]" multiple> Nemá to jiný význam. |
||
| jirkass Profil * |
#6 · Zasláno: 19. 3. 2013, 14:26:06
Davex: Děkuju za radu, jasně vlastně, že multiple select se musí předat polem. Můj problém ale dál přetrvává: Jak proměnnou propasírovat nikoli klasicky submitovým reloadem, nýbrž bez znovunačítání stránky. Můj problém jsem shrnul do nejtriviálnějšího příkladu, sesmoleného z webu, který už týden marně prolézám, abych našel jakýkoli příklad, který bych dokázal rozběhnout. Tady je soubor process.php:
<?php
// SIMLIEST EXAMPLE EVER php jquery ajax
echo $_REQUEST['bar']; ?>
<script src="jquery/js/jquery-1.9.1.js"></script>
<form id="foo">
<input name="bar" type="text" value="" />
<input type="submit" value="Send" />
</form>
<script language=javascript>
// variable to hold request
var request;
// bind to the submit event of our form
$("#foo").submit(function(event){
// abort any pending request
if (request) {
request.abort();
}
// setup some local variables
var $form = $(this);
// let's select and cache all the fields
var $inputs = $form.find("input, select, button, textarea");
// serialize the data in the form
var serializedData = $form.serialize();
// let's disable the inputs for the duration of the ajax request
$inputs.prop("disabled", true);
// fire off the request to /form.php
var request = $.ajax({
url: "process.php",
type: "post",
data: serializedData
});
// callback handler that will be called on success
request.done(function (response, textStatus, jqXHR){
// log a message to the console
console.log("Hooray, it worked!");
});
// callback handler that will be called on failure
request.fail(function (jqXHR, textStatus, errorThrown){
// log the error to the console
console.error(
"The following error occured: "+
textStatus, errorThrown
);
});
// callback handler that will be called regardless
// if the request failed or succeeded
request.always(function () {
// reenable the inputs
$inputs.prop("disabled", false);
});
// prevent default posting of form
event.preventDefault();
});
</script>Firebug po odeslání libovolného textu v inputu zahlásí: 1 požadavek, síť-XHR-POST zahlásí adekvátně proměnná bar=(odesl.hodnota), ale není v mých silách pochopit, jak tu proměnnou chňapnout. Děkuju za jakoukoli radu, s jquery zcela začínám. |
||
| Davex Profil |
#7 · Zasláno: 19. 3. 2013, 22:43:31
jirkass:
Nechápu v čem je problém a o jakém chňapání je řeč. Nedělá to něco, co by to mělo dělat? Příklad funguje. Hodnota z formuláře bude předána metodou POST skriptu process.php a tam bude dostupná v poli $_POST["bar"] (a $_REQUEST["bar"], ale to nedoporučuji, protože se tam v závislosti na verzi a nastavení PHP smíchají všechny vstupy $_GET, $_POST a $_COOKIE dohromady).
|
||
| jirkass Profil * |
#8 · Zasláno: 20. 3. 2013, 08:34:12
Davex:
v tom je potíž. Mně to nefunguje, proměnnou $bar v echu toho postu (obecněji requestu) nemám. Že b y něco blbě v nastavení serveru? Nebo špatně chápu smysl asynchronního odeslání a proměnná echo $_REQUEST['bar']; se mi nezobrazí, prostože je tam nějak "jindy" než čekám? Zkusil jsem tu proměnnou bar odchytit i do $_SESSION['rgzhj'] = $_REQUEST['bar'];, který jak bych předpokládal, by číhal na moment, kdy se tam proměnná asynchronně objeví, bezvýsledně. Děkuju za trpělivost. |
||
| Davex Profil |
jirkass:
„proměnnou $bar v echu toho postu (obecněji requestu) nemám“ To zjišťuješ jak? Ve Firebugu » Net » XHR » POST process.php » Response? „Nebo špatně chápu smysl asynchronního odeslánía proměnná echo $_REQUEST['bar']; se mi nezobrazí, prostože je tam nějak "jindy" než čekám?“ Nevím, kdy je očekávána nebo kde se má vypisovat, ale tento JavaScript AJAXem přijmutá data na stránce s formulářem nezobrazuje. Data se při stisknutí tlačítka jen na pozadí odešlou skriptu process.php (a při úspěchu se do konzole vypíše „Hooray, it worked!“, pokud prohlížeč nezná objekt window.console, tak se skript náhle ukončí - zhavaruje), a to je všechno. „Zkusil jsem tu proměnnou bar odchytit i do $_SESSION['rgzhj'] = $_REQUEST['bar'];“ Za předpokladu, že jsi nezapomněl na session_start(), by to také mělo fungovat.
|
||
| jirkass Profil * |
#10 · Zasláno: 20. 3. 2013, 23:15:57
Davex:
Asi mi něco důležitýho pořád uniká. Pošlu slovo ahoj: V Net » XHR » POST process.php » Response je: ahoj<script src=.....+celá html+js část příkladu. Jenže já to z toho soboru process.php na sebe posílám, a tam to echo v první řádce mlčí jak zařezaný, ani ten session nezobrazí. Pro upřesnění, bavím se o začátku výše uvedeného příkladu skriptu v souboru process.php doplněného na: ... echo $_POST['bar']; $_SESSION['neco'] = $_POST['bar']; echo $_SESSION['neco']; ... |
||
| Davex Profil |
#11 · Zasláno: 21. 3. 2013, 01:00:21
jirkass:
„ahoj<script src=.....+celá html+js část příkladu“ Takže to funguje přesně podle toho, jak je to uvedeno v kódu a po odeslání hodnoty ahoj AJAXem z formuláře je proměnná $_REQUEST['bar'] ve skriptu process.php nastavená, jinak by tam nebylo ahoj na začátku. Je ti doufám jasné, že se ten PHP skript spouští dvakrát - jednou zobrazí formulář a podruhé dělá něco na pozadí po odeslání formuláře (asi by měl jen něco udělat a nevypisovat ten kód jako v prvním případě). Obě spuštění jsou naprosto samostatné a pokud se nepoužije session, tak nejsou navzájem provázané a nepoužívají společné proměnné.
„Jenže já to z toho soboru process.php na sebe posílám, a tam to echo v první řádce mlčí jak zařezaný“ Pokud voláš skript process.php samostatně, tak v ten okamžik nedochází k odeslání formuláře, není nastavené pole a není co zobrazit. „Mým úmyslem je odeslat proměnnou na soubor, ze kterého ji odesílám, aby hned mohla něco zpracovat (třeba jestli je $_POST['bar']; tohle, zobraz tohle, ne-li, udělej tamto).“ Myslel jsem si, že to trochu chápu, ale tímto okamžikem jsem přestal úplně. |
||
| jirkass Profil * |
#12 · Zasláno: 21. 3. 2013, 09:53:39
Davex:
...Pokud voláš skript process.php samostatně, tak v ten okamžik nedochází k odeslání formuláře, není nastavené pole a není co zobrazit... - chápu to tedy správně, že když v takovýmhle příkladu deletnu veškerý javaskript, tak to klasicky submitem reloadne na sebe a zafunguje, ale javaskriptovým submitem se proměnná pošle jiným procesem a v tomhle souboru se nedá použít? Děkuju za trpělivost. <?php
// SIMLIEST EXAMPLE EVER php jquery ajax
if ( $_POST['bar']=="hu")
echo "go to left";
else
echo "go to right";
?>
<script src="jquery/js/jquery-1.9.1.js"></script>
<form id="foo" action="process.php" method="post">
<input name="bar" type="text" value="" />
<input type="submit" value="Send" />
</form>
<script language=javascript>
// variable to hold request
var request;
// bind to the submit event of our form
$("#foo").submit(function(event){
// abort any pending request
if (request) {
request.abort();
}
// setup some local variables
var $form = $(this);
// let's select and cache all the fields
var $inputs = $form.find("input, select, button, textarea");
// serialize the data in the form
var serializedData = $form.serialize();
// let's disable the inputs for the duration of the ajax request
$inputs.prop("disabled", true);
// fire off the request to /form.php
var request = $.ajax({
url: "process.php",
type: "post",
data: serializedData
});
// prevent default posting of form
event.preventDefault();
});
</script> |
||
| Davex Profil |
jirkass:
„chápu to tedy správně, že když v takovýmhle příkladu deletnu veškerý javaskript, tak to klasicky submitem reloadne na sebe a zafunguje, ale javaskriptovým submitem se proměnná pošle jiným procesem a v tomhle souboru se nedá použít?“ Domníval jsem se, že to víš, a proto to děláš. ([#6] jirkass„Jak proměnnou propasírovat nikoli klasicky submitovým reloadem, nýbrž bez znovunačítání stránky.“) Možná, kdybys rovnou napsal, co se s tou odeslanou proměnnou má udělat (kromě propasírovávání a chňapání), tak se pohneš dál. Zobrazit? Kde? Kdy? V nějakém elementu na stránce s formulářem? <div id="log"></div> Po úspěšném odeslání? request.done(function (response, textStatus, jqXHR){
// log a message to the console
$("#log").html(response);
console.log("Hooray, it worked!");
});Jen hodnotu bez skriptu? <?php
// SIMLIEST EXAMPLE EVER php jquery ajax
if (isset($_POST['bar'])) {
echo htmlspecialchars($_POST['bar'], ENT_QUOTES, 'UTF-8');
exit;
}
?><!-- atd. --> |
||
| jirkass Profil * |
#14 · Zasláno: 21. 3. 2013, 22:16:56
Davex:
Vrátím se na začátek tohohle threadu, kde jsem řešil multiple select, kdy jsem pro libovolně vybraný počet středisek měl zobrazit odpovídající větší množství údajů z db. To je ale případ asi vhodnější řešit normálně submitovým reloadem stránky a ne původně zamýšleným serializovaným selectablem od jquery. Ale už se taky stydím, že v r.2013 teprv s ajaxem začínám, proto jsem to tam chtěl nějak mermomocí vecpat. Zarazilo mě tehdy, že se nějaký hodnoty zobrazí v divu aniž by byly nějak alertovaný nebo echovaný, ale ono to tak prostě je. Musím se s tím nějak vyrovnat a hledat místa, která se pro jejich aplikaci hodí. A tak jsem vděčný za odpovědi, snad mi začíná trochu svítat a tímto děkuju i za trpělivost a přestávám prudit. ;-) |
||
|
Časová prodleva: 13 let
|
|||
0