Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Ajax URL

Sivun loppuun

faaraot [06.06.2011 17:16:21]

#

Miten saan päivitettyä osoiteriville tiedot? Jos haluaa esim. kopioda linkin. Eli Ajaxilla haettu tietoa ja se on tulostettu sivulle etusivu.html, osoiteriville ei päivity mitään. Onko edes mahdollista? Onko Ajaxilla mahdollista tehdä niin että hakee esim. tietoa ja sitten haluaa siirtyä takaisin päin back-painikkeella?

ville-v [06.06.2011 18:10:44]

#

Tulosta sivulle koodipätkä

<meta http-equiv="refresh" content="0; URL=osoite">

, jossa "osoite" on se kohta mihin tulostat ajaxilla linkin.

tsuriga [06.06.2011 20:43:46]

#

Tässä varmaankin haettiin Ajax-vaihtoehtoa, jossa koko sivua ei ladata uudestaan. Voit päivittää osoitteesta hash-osion, ts. risuaidan jälkeen tulevan osan, mikä laukaisee oman eventtinsä. Uusimmilla selainversioilla toimii window.addEventListener('hashchange', funcRef, false);, mutta cross-browser ratkaisuun voit käyttää esim. jQuery hashchange plugaria.

faaraot [07.06.2011 09:04:11]

#

Saanko tällä mitenkään lähetettyä arvoja functiolle? en saa kyllä pelaamaan.

Tällä pitäisi lähettää. Jos teen formin niin saan lähetettyä value arvoilla. Mutta osoiteriville ei silloin saa mitään arvoja. Tiedän että tuo testi(this.value) on ainakin väärin.

<a href="#otsikko=TESTI" onClick="javascript:testi(this.value)">TESTI</a>

Javakoodi

function testi(str)
{
var xmlhttp;
if (str=="")
  {
  document.getElementById("testi").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("testi").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","testi.php?otsikko="+str,true);
xmlhttp.send();
}

-----------------------

Tällä Jqueryllä sain toimimaan mutta on mielestäni hidasta käyttää. Sekä miten siihen sais lisarvoja section lisäksi. esim. section=home ja jokin=testi?

http://yensdesign.com/2008/11/creating-ajax-websites-based-on-anchor-navigation/

tsuriga [07.06.2011 12:19:35]

#

Olipas sekava sepostus. Haluatko siis lähettää nappia painettaessa lomakkeen sekä päivittää samalla osoiteriville useamman kuin yhden parametrin? Siinä tapauksessa tee jotain seuraanvanlaista. Lue kommentit, sisäistä toiminta ja muokkaa tarpeen mukaan. En testannut, eli korjaa myös mahdolliset virheet :).

// Sidotaan elementtiin, jonka id on 'form', submit-tapahtumankuuntelija
$('#form').submit(function() {
    // Validoi lomake tässä

    // Valikoi lomakkeelta lähtevä data tähän, esim.
    var data = { 'otsikko': $('#otsikko').val() };

    // Lähetetään lomakkeen tiedot serverille
    // Vaihda tilalle $.post, mikäli formin metodi on post
    // Vaihda parametrejä tarpeesi mukaan, kts. http://api.jquery.com/jQuery.get/
    $.get(testi.php, data, function(data) {
        // Tehdään datalla jotain?
        alert(data);

        // Päivitetään lokaatio
        /* Jos käytät a-elementtiä lomakkeen lähettämiseen,
         * hrefin asettaminen kenties riittää, ellet halua
         * muodostaa osoitetta dynaamisesti
         */
        /* Jos selaimet eivät tykkää =-ja &-merkeistä hashissa
         * kokeile vaihtaa ne joksikin muiksi
         */
        window.location.hash = '#section=home&jokin=testi';
    });


    // Estetään sivun vaihtuminen
    return false;
});

// Tutkitaan osoiterivin muutoksia
/* Jos päivität sivun osoitteen aina vain
 * lomaketta lähetettäessä, et tarvitse tätä.
 * Voit hoitaa tarvittavat toiminnot lomaketta
 * lähetettäessä
 */
$(window).hashchange(function() {
    // Tehdään jotain location.hashilla
});

faaraot [07.06.2011 14:49:01]

#

Ok luen läpi.. olen huono selittämään mutta olen tehnyt ajaxia käyttämällä sivut jossa tietoa haetaan tietokannasta. Sitten jokaisessa haetussa on lue lisää. kun sitä painaa niin niin lisäteksti avautuu tiettyyn moduuliin. esim. <div id="testi"> tähän </div>

nyt kun ajaxilla haetaan niin esim et voi palata back painikkeella takaisinpäin tai päivittää sivua tai kopioida linkkiä.

eli siksi haluan että osoiteriville saisin koodit jonka kopiomalla voi kyseinen jutun lukea.

Lebe80 [07.06.2011 14:58:38]

#

faaraot: koska olet itse tehnyt sivusi, niin sähän voit tehdä jonkun tuonne jonkun linkin, josta osoitteen voi kopioida (esim. eri videopalveluissa aukeaa erillinen lightbox, jossa tekstikentässä linkki).

Linkinhän muodon sä voit itse määrittää, joten tässä varmaan se järkevin olisi juuri jo joku edellämainittu tapa, esim.

www.faaraot.fi/mun-juttu#lue-lisaa tai www.faaraot.fi/mun-juttu?luelisaa

Ensimmäisessä tapauksessa vain joudut JavaScriptillä tarkistamaan ja lataamaan sisällön ajaxilla, jolloin se tietenkin vaikuttaa jonkin verran myös hakukonetuloksiin.

Blaze [07.06.2011 15:34:51]

#

Kaikelta tältä säädöltähän ois vältytty, kun ois jätetty käyttämättä sitä Ajaxia...

On se kumma kun ensin pitää rikkoa vepin perustoiminnallisuus ja sitten ihme purkalla yrittää sitä korjata.

tsuriga [17.06.2011 12:24:58]

#

Githubissa näyttäisi (näin niin kuin silmämääräisesti) toimivan ainakin Fx 5:llä (Operalla tuntuisi lataavan sivun aina uudelleen) niin, että repoja selatessa tiedostot liukuvat esiin ja osoitekin päivittyy normaalin oloisesti. Jos kiinnostaa tutkia niin eikun kaivamaan sorsia, en itse valitettavasti juuri nyt ehdi.

qeijo [18.06.2011 13:06:49]

#

iso JOS ymmärsin oikein... ;)
Nopea rääpäisy, eli siis napin painnalluksesta div update, sekä jos tullaa sivulle suoralla urlilla sis. hash. http://sivut.fi#artikkeli
Toki nyt hän se koittaa ladata sisalto:on kaikki mahdolliset hashit, joten se kannattaa ehkä rajata johonki arrayhin tjn..

<!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" xml:lang="fi" lang="fi">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta http-equiv="Content-language" content="fi" />

	<title>Bomppabolen</title>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">

$("document").ready(function() {

     //Tarkista onko hashi urlissa..
     tarkistaHash();

    $('.artikkeli').click(function() {
            var hash = $(this).attr('href');
            lataa(hash.substring(1) + ".html");
    });

    function tarkistaHash()
    {
        if(window.location.hash)
        {
            lataa(window.location.hash.substring(1) + ".html");
        }
    }

    function lataa(filu)
    {
        //Tahan joku tarkistusfunktio, eli saadaanko kys. filu getata..
        $.get("artikkelit/" + filu, function(data){
            $("#sisalto").html(data);
        });
    }

});
</script>
</head>

<body>

<div id="sisalto">
Sisältää osan artikkelista..
<p>
<!-- painalluksesta urli paivittyy, eli hashi lisataan -->
<!-- 'a' on ladattava artikkeli.. -->
<a href="#a" class="artikkeli">Lue lisää..</a>
</p>
</div>

</body>
</html>

Tai versio 2..

Liitetään myös divin id mukaan hashiin ja lautaus funktioon..

http://sivut.fi#divinid-artikkelinnimi

<!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" xml:lang="fi" lang="fi">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta http-equiv="Content-language" content="fi" />

	<title>Bomppabolen</title>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">

$("document").ready(function() {

     //Tarkista hashia urlissa..
     if(window.location.hash)
     {
            lataa(window.location.hash.split("-"));
     }

    $('.artikkeli').click(function() {
            lataa($(this).attr('href').split("-"));
    });

    function lataa(tavara)
    {
        //Tahan edelleen joku tarkistusfunktio, eli saadaanko kys. filu getata..
        $.get("artikkelit/" + tavara[1] + ".html", function(data){
            $(tavara[0]).html(data);
        });
    }

});
</script>
</head>

<body>

<div id="sisalto1">
Sisältää osan artikkelista..
<p>
<a href="#sisalto1-artikkeli1" class="artikkeli">Lue lisää..</a>
</p>
</div>

<div id="sisalto2">
Sisältää osan artikkelista..
<p>
<a href="#sisalto2-artikkeli2" class="artikkeli">Lue lisää..</a>
</p>
</div>

</body>
</html>

tsuriga [21.06.2011 02:09:17]

#

Tuo githubin osoitteenpäivitys toimii HTML 5 History/State API:lla. Edellistä ehdottamaani jQuery-plugaria parempi vaihtoehto on History.js, joka hoitaa APIn käpristelyn käyttäjän puolesta ja turvautuu tuota History APIa tukemattomien selainten ja versioiden tapauksessa tässä ketjussa moneen kertaan esiteltyyn hashin muuttamiseen.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta