Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I have created a plugin that will submit a form via ajax. Below is the php function.

add_action('wp_ajax_nopriv_audience_intel', 'audience_intel_ajax');
add_action('wp_ajax_audience_intel', 'audience_intel_ajax');
function audience_intel_ajax() {
    $likeit = $_POST['likeit'];
    $response = $_POST['response'];
    $postid = $_POST['postid'];

    add_option( 'testing_form_like', $likeit );
    add_option('testing_form_response', $response);

    global $wpdb;
    $tablename = $wpdb->prefix . "intel";

    $newdata = array(
        'radio' => $likeit,
        'feedback' => $response,
        'postid' => $postid
    );    

        $wpdb->insert (
        $tablename,
        $newdata
    );

    $result = "<p>Finished successfully!</p>";
    // json_encode($result);
    echo $result;
}

Here is my script.

jQuery(document).ready(function($) {
$('.audience_intel_container .close').click(function(){
    $('.audience_intel_container').fadeOut('fast', function(){

    });
});

$('.audience_intel_container button').click(function(){
    console.log('clicked');
    var formdata = $('#audience_intel_form').serialize();
    $.ajax({
        type : "post",
        dataType : "html",
        url : audience_intel_js.ajaxurl,
        data : 'action=audience_intel&'+formdata,
        success: function(response) {
            alert(response);
            $('.audience_intel_container').html(response);
        }
    })
})   
});

The form data is added to the database correctly, but I am not able show an output message after the request is complete. I have tried both return, echo, and echo json_encode in the ajax function.

I appreciate any insight.

share|improve this question
    
After echo $result; you need to exit; –  webaware Jan 9 '13 at 8:30
    
I have added the exit. But, I am still not getting any results. –  Eric Binnion Jan 9 '13 at 8:38
    
If you watch the network tab in Chrome's developer tools or Firefox's Firebug extension, what is coming back from the server? Is it running successfully or generating an error? What is the output it returns? And: if the output is HTML, why are you telling jQuery that it's JSON? –  webaware Jan 9 '13 at 8:42
    
Use die($result); instead of echo, and try logging the response in the the success function console.log(response); , and I think you should replace dataType: "json" with "html". –  Peter Jan 9 '13 at 8:53
    
FYI, die($result); and echo $result; exit; will do the same thing. –  webaware Jan 9 '13 at 8:54

2 Answers 2

This is the final code I am using. Thanks to webaware for pointing out that I was not using the correct datatype.

   jQuery(document).ready(function($) {
        $('.audience_intel_container .close').click(function(){
        $('.audience_intel_container').fadeOut('fast', function(){

        });
});

$('.audience_intel_container button').click(function(){
    console.log('clicked');
    var formdata = $('#audience_intel_form').serialize();
    $.ajax({
        type : "post",
        dataType : "html",
        url : audience_intel_js.ajaxurl,
        data : 'action=audience_intel&'+formdata,
        success: function(response) {
            alert(response);
            $('.audience_intel_container').html(response);
        }
    })
})   
});

php

add_action('wp_ajax_nopriv_audience_intel', 'audience_intel_ajax');
add_action('wp_ajax_audience_intel', 'audience_intel_ajax');
function audience_intel_ajax() {
$likeit = $_POST['likeit'];
$response = $_POST['response'];
$postid = $_POST['postid'];

add_option( 'testing_form_like', $likeit );
add_option('testing_form_response', $response);

global $wpdb;
$tablename = $wpdb->prefix . "intel";

$newdata = array(
    'radio' => $likeit,
    'feedback' => $response,
    'postid' => $postid
);

$wpdb->insert (
    $tablename,
    $newdata
);

$result = "<p>Finished successfully!</p>";
// json_encode($result);
echo $result;
exit;
}
share|improve this answer

You will be better off using the $.post for ajax. Have a look here http://codex.wordpress.org/AJAX_in_Plugins for more information.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.