Search code examples
javascriptjqueryhtmlajaxoptgroup

Requesting content without reloading the page


I want to use a select element for mobile viewing of my website. Following is the select options.

HTML:

<select name="select-choice-8" id="select-choice-nc">
  <optgroup label="News">
    <option value="feature">Fea</option>
    <option value="current">Current</option>
    <option value="research">Research</option>
  </optgroup>

  <optgroup label="Archive">
    <option value="archive">Archive</option>
  </optgroup>

  <optgroup label="Video">
    <option value="">Video</option>
  </optgroup>

  <optgroup label="Submit">
    <option value="">Story</option>
    <option value="">Event</option>
  </optgroup>
</select>

I want use JavaScript / jQuery to do some AJAX calls based on the what the user selects in order to avoid reloading the whole page (e.g. filling a container with the returned AJAX content).

I need some ideas or examples to solve this problem.

Thanks in advance.


Solution

  • Try this: http://shaquin.tk/experiments/select-ajax2.html.

    HTML:

    <select name="select-choice" id="select-choice">
        <optgroup label="News">
            <option value="feature">Feature</option>
            <option value="current">Current</option>
            <option value="research">Research</option>
        </optgroup>
        <optgroup label="Archive">
            <option value="archive">Archive</option>
        </optgroup>
        <optgroup label="Video">
            <option value="video">Video</option>
        </optgroup>
        <optgroup label="Submit">
            <option value="story">Story</option>
            <option value="event">Event</option>
        </optgroup>
    </select>
    <div id="article">Please select an article to view.</div>
    

    JS:

    var origText = '';
    $(document).ready(function() {
        origText = $('#article').text();
        $('select').on('change', changed);
    });
    function changed(e) {
        $('#article').html('<span class="loading">Loading...</span>');
        $('#article').load('content.php', $.param({0: e.target.value, 1: origText}));
    }
    

    PHP:

    <?php
    $selected = $_GET[0];
    $articles = array(
            '' => $_GET[1],
            'feature' => 'Feature article goes here',
            'current' => '<p>Lorem ipsum dolor sit amet, denique laetare ... se est Apollonius.</p>',
            'research' => 'You selected <code>research</code>',
            'archive' => 'Archives',
            'video' => '<div style="font-size:48pt;font-weight:bold;font-style:italic;background:red;text-align:center;padding:20px;margin:10px;border-radius:20px;-moz-border-radius:20px;-webkit-border-radius:20px;">Video</div>',
            'story' => 'Submit a story',
            'event' => 'Submit an event'
        );
    $article = $articles[$selected];
    echo $article;
    ?>
    

    CSS (optional):

    body {
        background: #ccc;
        text-align: center
    }
    #article {
        padding: 30px;
        margin: 20px;
        text-align: left;
        background: #eee;
        text-shadow: 1px 1px #fff;
        text-shadow: 0 0 3px #fff;
        border-radius: 8px;
        -moz-border-radius: 8px;
        -webkit-border-radius: 8px;
    }
    .loading {
        text-transform: uppercase;
        font-size: 15pt;
        text-shadow: 1px 1px #f00, 1px 2px #f00, 2px 2px #f00, 3px 3px #f00;
    }
    

    In the PHP, you would probably want to fetch the text from a database: PHP - MySQLi.