Search Contact Person Plugin via Ajax
It's actually quite easy and you don't really need json or a plugin to do it. If you really need it as a plugin, then that's a whole different thing that would need a separate answer.

In your search template file:

&lt;div id="contacts"&gt;&lt;!-- results will get inserted here. --&gt;&lt;/div&gt;

&lt;form id="find-contact-form" data-url="/contacts"&gt;          
    &lt;label for="zip"&gt;Zip Code&lt;/label&gt;
    &lt;input type="text" name="zip"&gt;
    &lt;!-- submits form data via post to 'data-url' attribute --&gt;
    &lt;input type="submit" value="Find Contacts"/&gt; 
&lt;/form&gt;


In your search template javascript file (make sure to include jquery):

$(function() {
    $('#find-contact-form').submit(function(event) {
        event.preventDefault();

        var data = $(this).serialize();
        var url = $(this).attr('data-url');

        $.post(url, data, function(result) {
            $('#contacts').html(result);
        }, 'html')
        .fail(function() {
            //console.log("error");
        });
    });
}


In your contacts.html template:

{% if craft.request.isAjax %}

    {% set zip = craft.request.getParam('zip') %}

    {% if zip %}
        {% set contacts = craft.entries.section('contacts').zip(zip) %}
        {% if contacts|length %}
            {% for contact in contacts %}
                &lt;img src="{{ contact.image.first.url" }}"&gt;&lt;br&gt;
                {{ contact.firstName }} {{ contact.lastName}}&lt;br&gt;
                T {{ contact.telephone}}&lt;br&gt;
            {% endfor %}
        {% else %}
            No contacts found with the zip {{ zip }}.
        {% endif %}
    {% endif %}

{% endif %}


You can also use that same template for your normal contacts page. Just use the clause {% if not craft.request.isAjax %}Put my full page content here.{% endif %}. In fact, the search page can just submit to itself using this technique.