Pranavan R Aok Pranavan R Aok - 1 month ago 12
Ajax Question

AJAX inside $.when giving fist character of the return string

I'm calling an AJAX using a $.when to wait till that ajax completes and return to process the next ajax inside.

This is where $.when calling happens:

function loadAllData(){
$.when(getCreditorID()).done(function(a1){
console.log("cx id is : " + parseFloat(a1[0])); //this is in the attached screen shot
var urlx = "functions/getCustomerData.php";
$.post(
urlx,
{
selectedValue: a1[0],
},
function(data) {
$("#payduedate").val(data[0].duedate);
document.getElementById('portcode').value = data[0].portcode;
document.getElementById('currencycode').value = data[0].currencycode;
document.getElementById('convertion').value = data[0].conversion;
},
"json"
);
});
}


Above code is calling below ajax method function:

function getCreditorID(){
id = "";
var creditorcodex = document.getElementById('creditorcode').value;
// console.log("getCreditorID input: " + creditorcodex);
var urlx = "functions/getCreditorID.php";
return $.ajax({
type: 'POST',
url: urlx,
data: {
creditorcode: creditorcodex,
},
success: function(data) {
console.log("Result : "+data); //this is in the attached screen
}
});
}


Above function calling getCreditorID.php to get data:
getCreditorID.php:

<?php
include '../config/dbConn.php';

$creditorcode = $_POST["creditorcode"];
// $creditorcode = $_GET["creditorcode"];
$result="";

$sql = "SELECT intCustomerID FROM lms.tblcustomers WHERE varCustomerName='".$creditorcode."';";

mysql_select_db('$dbname');
$retval = mysql_query( $sql, $conn );

if(! $retval )
{
$result=-999;
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
$result=$row["intCustomerID"];
}
echo $result;
mysql_close($conn);
?>


Problem is:
If return from getCreditorID.php is '44' then
console.log("Result : "+data);
inside getCreditorID() function will output in console as 'Result : 44' and this is working fine. But the same function is getting returned in loadAllData() function and using the value returned for next ajax. Here if we print the return value using
console.log("cx id is : " + parseFloat(a1[0]));
output is '4' which should be '44'. Which means it's only giving the first character as output and ignoring the rest.

Screenshot of running console:
screen shot of running code

Please find a way out.

Answer

In your function loadAllData(), use a1 instead of a1[0] and update your code accordingly

function loadAllData(){
    $.when(getCreditorID()).done(function(a1){
        console.log("cx id is : " + parseFloat(a1));  // did correction  here
        var urlx = "functions/getCustomerData.php";
        $.post(
            urlx, 
            { 
                selectedValue: a1[0],
            },
            function(data) {
                $("#payduedate").val(data[0].duedate);
                document.getElementById('portcode').value = data[0].portcode;
                document.getElementById('currencycode').value = data[0].currencycode;
                document.getElementById('convertion').value = data[0].conversion;
            }, 
            "json"
        );
    });
}