$conf, $runtime; function_exists('chdir') AND chdir(APP_PATH); $r = 'mysql' == $conf['cache']['type'] ? website_set('runtime', $runtime) : cache_set('runtime', $runtime); } function runtime_truncate() { global $conf; 'mysql' == $conf['cache']['type'] ? website_set('runtime', '') : cache_delete('runtime'); } register_shutdown_function('runtime_save'); ?>jquery - AJAX - Returning Two JSON Objects with One PHP Function|Programmer puzzle solving
最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

jquery - AJAX - Returning Two JSON Objects with One PHP Function

matteradmin8PV0评论

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);
            }
        });
    });
});

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);
            }
        });
    });
});
Share Improve this question edited Jul 26, 2013 at 19:26 M-R 2,61621 silver badges31 bronze badges asked Jul 26, 2013 at 17:34 shapadashapada 411 gold badge2 silver badges8 bronze badges
Add a comment  | 

3 Answers 3

Reset to default 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);
            }
        });
    });
});

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.

<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"/>
Post a comment

comment list (0)

  1. No comments so far