0

How would I go about returning two JSON objects with one AJAX call and PHP function? Any help is much appreciated!

Here's the PHP function:

function get_ldap_attr() {
    header("Content-type: application/json");
    $lan = $_POST['lan'];
    $dn = get_site_option ( "ldapServerOU" );
    $usr = get_site_option ( "ldapServerCN" );
    $pw = get_site_option ( "ldapServerPass" );
    $addr = get_site_option ( "ldapServerAddr" );
    $ad = ldap_connect ( $addr )
        or die ( "Connection error." );
    ldap_set_option ( $ad, LDAP_OPT_PROTOCOL_VERSION, 3 );
    ldap_set_option ( $ad, LDAP_OPT_REFERRALS, 0 );
    $bind = ldap_bind ( $ad, $usr, $pw );
    if ( $bind ) {
        $SearchFor ="cn=".$lan;
            $result = ldap_search ( $ad,$dn,$SearchFor );
            $entry = ldap_first_entry ( $ad, $result );
            if ( $entry != false )  {
                $info = ldap_get_attributes ( $ad, $entry );
            }           
            $comm  = stripos ( $info['manager'][0], ',' );
                // find position of first comma in CN=Mxxxxxx,OU=Users,OU=MCR,DC=mfad,DC=mfroot,DC=org  (directReports field)
            $eq = stripos ( $info['manager'][0], '=' );
                // find position of first =
            $s_lanid = substr ( $info['manager'][0], $eq+1, ( ( $comm-1 ) - ( $eq ) ) );
                //get substring between = and comma... for lanid happiness..
            $sup = getLDAPInfo ( $s_lanid, $bind, $ad, $dn ); 
                // get supervisor's info...
    }

    echo json_encode($sup);
    die();  
}

And the jQuery:

jQuery(function() {
    jQuery('#empLanId').on('blur', function() {
        var lan = jQuery('#empLanId').val();
        var ajaxurl = '<?php echo admin_url("admin-ajax.php", null); ?>';
        var data = { action: "get_ldap", lan: lan};
        jQuery.ajax({
            type: 'POST',
            url: ajaxurl,
            data: data,
            dataType: 'json',
            success: function(response) {
                jQuery('#empSupLanId').val(response.lanid);
                jQuery('#empSupName').val(response.fullname);
                jQuery('#empSupNumber').val(response.phone);
            }
        });
    });
});

3 Answers 3

2

If I get it correctly, You need to wrap them in an array and pass to Javascript.

function get_ldap_attr() {
    header("Content-type: application/json");
    ...

    // suppose you want to return $second_var
    echo json_encode(array($sup,$second_var));
    die();  
}

Success function of JSON request will receive them as array. You can access them with integer index.

jQuery(function() {
    jQuery('#empLanId').on('blur', function() {
        var lan = jQuery('#empLanId').val();
        var ajaxurl = '<?php echo admin_url("admin-ajax.php", null); ?>';
        var data = { action: "get_ldap", lan: lan};
        jQuery.ajax({
            type: 'POST',
            url: ajaxurl,
            data: data,
            dataType: 'json',
            success: function(response) {
                response[0] // first $sup variable
                response[1] // second $second_var variable
                //jQuery('#empSupLanId').val(response.lanid);
                //jQuery('#empSupName').val(response.fullname);
                //jQuery('#empSupNumber').val(response.phone);
            }
        });
    });
});
0
1

jQuery Code:

(function ($) {
    'use strict';
    $(function () {
        var value_1 = 10;
        var value_2 = 20;
        $('.btn').on('click', function(){
            $.ajax({
                url: 'your_ajax_url_here',
                type: 'POST',
                data: {
                    action  :   'action_name',
                    val_1   :   value_1,
                    val_2   :   value_2,
                },
                beforeSend: function () {
                    console.log('Sending....');
                },
                success: function (response) {
                    var obj = JSON.parse(response);
                    console.log(obj);
                },
                error: function (errorThrown, status, error) {
                    console.log( status );
                }
            });
        })
    });
})(jQuery);

PHP Code:

function get_ldap_attr() {

   $obj_val_1 = $_POST['val_1'];
   $obj_val_2 = $_POST['val_2'];

   echo json_encode(array(
       'obj_1' => $obj_val_1,
       'obj_2' => $obj_val_2,
   ));

}

That's all.

0
<script type="text/javascript">
  $(document).ready(function(){

    //jquery script
    $("#emp_mat").change(function(){

      var emp_mat = $(this).val();
    $.ajax({
        url:"emp_info.php",
        dataType:'json',
        data:{data:emp_mat}
      }).done(function(result)
      {
        $("#nom_prenom").val(result[0]);
        $("#adresse").val(result[1]);

      })
    });

  });
</script>

<input type="text" id="nom_prenom"   disabled="true" size="58"/>
<input type="text" id="adresse"   disabled="true" size="58"/>
1
  • Please edit your answer, and add an explanation: why could that solve the problem?
    – fuxia
    Jul 26, 2018 at 10:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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