开发者

jQuery: How to AJAXify WordPress Search?

I am trying to add AJAX functionality to a WordPress-based site.

When a visitor clicks a menu link, this code loads the text of the text of the required page into the main page:

$('#access a').click(function(event) {
    event.preventDefault();
    var url = $(this).attr('href');
$('#content').fadeOut(500, function() {
    $('#content').load(url, function() {
        $('#content'开发者_开发百科).fadeIn(500);
        }); 
    });
});

My problem is with the search form. It has the following structure in the page:

<div id="my_search"><form role="search" method="get" id="searchform" action="http://myurl.com/" >
    <input type="text" value="" name="s" id="s" />
    <input type="submit" id="searchsubmit" value="Search" />
    </div>
    </form></div>

When I type a word testing into the form, and click the #searchsubmit" button or Enter key on the keyboard, I am redirected to a new WordPress page with the following address:

http://www.myurl.com/?s=testing

Here's PHP code that makes it work:

<?php if ( have_posts() ) : ?>
                <h1 class="page-title"><?php printf( __( 'Search Results for: %s', 'twentyten' ), '<span>' . get_search_query() . '</span>' ); ?></h1>
                <?php
                /* Run the loop for the search to output the results.
                 * If you want to overload this in a child theme then include a file
                 * called loop-search.php and that will be used instead.
                 */
                 get_template_part( 'loop', 'search' );
                ?>
<?php else : ?>
                <div id="post-0" class="post no-results not-found">
                    <h2 class="entry-title"><?php _e( 'Nothing Found', 'twentyten' ); ?></h2>
                    <div class="entry-content">
                        <p><?php _e( 'Sorry, but nothing matched your search criteria. Please try again with some different keywords.', 'twentyten' ); ?></p>
                    </div><!-- .entry-content -->
                </div><!-- #post-0 -->
<?php endif; ?>

QUESTION: I want to prevent the default behavior on #searchsubmit click and on Enter key click, and load the content of the search results (http://www.myurl.com/?s=whateverwordItype) into the #content of the main page. How can I do that?

(I suppose I just need to insert that php code inside jQuery code in some way, but the task is a little beyond my knowledge of jQuery and PHP.)

I would be grateful for a code snippet from a knowledgeable person, if possible.


Use some simple jQuery and javascript

In order to load your search results through an ajax request you can grab them directly from the search results page using the following code:

// Bind the submit event for your form
$('#searchform').submit(function( e ){ 

    // Stop the form from submitting
    e.preventDefault();

    // Get the search term
    var term = $('#s').val();

    // Make sure the user searched for something
    if ( term ){

        $.get( '/', { s: term }, function( data ){

            // Place the fetched results inside the #content element
            $('#content').html( $(data).find('#content') );

        });

    }

});

Note: $(data).find('#content') is assuming your search.php results aggregate in an element whose id is content i.e. <div id="#content"> ... Results ... </div>

The above would go into an external file or placed just before the closing </body> tag.

You can customize the search.php page to organize your output results.


Try this

$("#searchsubmit").click(function(e){
    e.preventDefault();
    var search_val=$("#s").val(); 
    $.post('search.php',{search_string:search_val},function(data){
        if(data.length>0){
            $("#results").html(data);
        }
      });
});

This will call the search.php, which will get the search string as a post variable like $_POST['search_string'], Here, you process the search string and echo the results, which will be get back to the page as data. Have a div with id day results, The $("#results").html(data); will put the results got from search.php into the div. If you want to use get, then just replace post in the jQuery funstion as get and you can use $_GET[]in the search.php.

Hope this would help you

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜