简体   繁体   中英

Ajax POST is sending empty parameters

UPDATE - I've solved the problem

I found the problem, it was the property of the post_max_size in php.ini which was set to 8MB. After changing it to 20MB everything worked as it should. Thanks for pointing out some syntax problems in the code.

Original post

I have this code in the body tag of a page:

<script type = "text/javascript" >
    $(document).ready(function() {
        var scriptPath = "<?php echo $jobJSPath[0]; ?>";
        if (scriptPath != "") {

            var hasInput = "<?php echo $hasInput; ?>";
            var jobExecIp = "<?php echo $jobtekerIP; ?>";
            var sentToExec = "<?php echo $sentToExececution;?>";
            var hasOutput = <?php echo json_encode($allOutputVarName);?>;

            $.getScript(scriptPath, function(data, textStatus, jqxhr) {

                var jobBatchID = "<?php echo $jobsArray[0];?>";
                var jobID = "<?php echo $jobsArray[1];?>";
                var jobName = "<?php echo $jobsArray[2];?>";

                // execute a function inside the script has no input parameter
                if (typeof hasInput !== 'undefined' && hasInput === 'no'){
                    // execute a function inside the script with no input parameter
                    var returnVar = <?php echo $newJobName; ?>;
                }
                // execute a function inside the script has input parameter
                if (typeof hasInput !== 'undefined' && hasInput === 'yes'){
                    var vars = [];

                    // create an array of all the paths of the input variables
                    var arrayFromPHP = <?php echo json_encode($newAllInputVarPath);?>;
                    for (var i = 0; i < <?php echo sizeof($newAllInputVarPath);?>; i++) {
                        vars.push(JSON.parse($.ajax({type: "GET", url: arrayFromPHP[i], async: false, cache: false}).responseText));
                    }
                    // execute a function inside the script with multiple input parameter
                    var returnVar = <?php echo $jobsArray[2]; ?>.apply(this, vars);
                }

                // get the execution status
                var execMessage = textStatus;

                // for the jobs without any return parameter
                if (hasOutput.length = 1 && hasOutput[0] === "NULL") {
                    var result = "No parameters are being returned";
                    $.ajax({
                        url: 'executedJobs.php',    
                        type: 'POST',
                        data: {results : result, job_batch_id : jobBatchID, job_id : jobID, job_name : jobName, sentToExec : sentToExec, jobExecIp : jobExecIp, execMessage : execMessage},
                        cache: false
                        });
                } else { // for the jobs with any return parameter

                    if (typeof returnVar != 'undefined' ) { 

                        // this parameter is going to be posted to another page
                        var result = [];
                        var numOfOutputVar = <?php echo $jobsArray[4]; ?>;

                        if (Object.prototype.toString.call(returnVar) === '[object Array]') {
                            var countIndex = 0;
                            var countValue = 0;
                            var allValuesNoArray = false;

                            // check if all the returnVar values are not [object Array]
                            $.each(returnVar, function(index, value) {
                                console.log(Object.prototype.toString.call(value));
                                countIndex = countIndex + 1;

                                // check if value is not an [object Array] not an '[object String]'
                                if (Object.prototype.toString.call(value) !== '[object Array]' && Object.prototype.toString.call(value) !== '[object String]'){
                                    countValue = countValue + 1;
                                }
                            });

                            // if all returnVar values are not [object Array] then true
                            if (countIndex === countValue) {
                                allValuesNoArray = true;
                            }

                            // if at least one returnVar value is an [object Array] then do
                            if (allValuesNoArray === false ) {
                                // if the job has more than one return variable
                                if (numOfOutputVar > 1) {
                                    $.each(returnVar, function(index, value) {
                                        result.push(JSON.stringify(value));
                                    })
                                } else { // if the job has only one return variable
                                    var allRetVarToOne = [];
                                    $.each(returnVar, function(index, value) {
                                        allRetVarToOne.push(value);
                                    })
                                    result.push(JSON.stringify(allRetVarToOne));
                                }
                            } else { // if all returnVar values are not [object Array] then do
                                console.log(numOfOutputVar);
                                // if the job has more than one return variable
                                if (numOfOutputVar > 1) {
                                    $.each(returnVar, function(index, value) {
                                        result.push(JSON.stringify(value));
                                    })

                                } else { // if the job has only one return variable
                                    result.push(JSON.stringify(returnVar));
                                }
                            }
                        } else {
                            result.push(JSON.stringify(returnVar));
                        }

                        // executes the POST if everything is ok
                        $.ajax({
                            url: 'executedJobs.php',    
                            type: 'POST',
                            data: {results : result, job_batch_id : jobBatchID, job_id : jobID, job_name : jobName, sentToExec : sentToExec, jobExecIp : jobExecIp, execMessage : execMessage},
                            cache: false
                        });
                    } else { // executes this POST if the job execution was not successful, with no reason
                        var execMessage = "An unknown falure has accourd while executing, will be executed once more"
                        $.ajax({        
                            type: 'POST',
                            data: {results : result, job_batch_id : jobBatchID, job_id : jobID, job_name : jobName, sentToExec : sentToExec, jobExecIp : jobExecIp, execMessage : execMessage},
                            cache: false,
                            url: 'executedJobs.php'
                        });
                    }
                }
            }).fail(function(jqxhr, settings, exception) {  // executes if the getScript(scriptPath, function(data, textStatus, jqxhr) {}) faild
                var execMessage = exception.message; 
                var result = undefined;
                var jobBatchID = "<?php echo $jobsArray[0];?>";
                var jobID = "<?php echo $jobsArray[1];?>";
                var jobName = "<?php echo $jobsArray[2];?>";
                var sentToExec = "<?php echo $sentToExececution;?>";

                $.ajax({        
                        type: 'POST',
                        data: {results : result, job_batch_id : jobBatchID, job_id : jobID, job_name : jobName, sentToExec: sentToExec, jobExecIp : jobExecIp, execMessage : execMessage},
                        cache: false,
                        url: 'executedJobs.php'
                    });
            });
        }
    });
</script>

The problem is that my post under the comment “executes the POST if everything is ok” sends empty parameters if the function that I'm executing using var returnVar = <?php echo $newJobName; ?> var returnVar = <?php echo $newJobName; ?> or var returnVar = <?php echo $jobsArray[2]; ?>.apply(this, vars); returnVar = <?php echo $jobsArray[2]; ?>.apply(this, vars); has var maxNum = 500000; and var arrayMaxSize = 500000; . When I look in the console under the parameter window of the POST to executedJobs.php , I the right results there just not on the view window of the and of course not on the executedJobs.php page itself. And this is the function that is being called by the var returnVar

function job1() {
    var notSortNumArray = [];
    var notSorted1 = [];
    var notSorted2 = [];
    var maxNum = 500000;
    var arrayMaxSize = 500000;
    var minNum = 1;
    // create an array with arrayMaxSize random nmber between minNum and maxNum
    for (var x = 0; x < arrayMaxSize; x++) {
        notSortNumArray.push(Math.floor(Math.random() * (maxNum - minNum)) + minNum);
    }
    // The notSorted1 is from possition 0 untill random between 0 and arrayMaxSize
    notSorted1 = notSortNumArray.slice(0, Math.floor(Math.random() * notSortNumArray.length));
    // The notSorted2 is from where the notSorted1 ends untill the last number form the notSortNumArray
    notSorted2 = notSortNumArray.slice(notSorted1.length, notSortNumArray.length);
    // job dependencies
    var nextJob = "job2, job3";
    var prevJob = "null";
    // results
    return [ notSortNumArray, arrayMaxSize, notSorted1, notSorted2 ];
}

Funny thing is that for var maxNum = 250000; and var arrayMaxSize = 250000 everything works perfect and all the results are being sent to the executedJobs.php page for further.

Again I hope someone can help me solve this since I don't have a clue why it's not working for higher numbers of the var maxNum and the var arrayMaxSize parameters, the results are there they and something is being sent to the executedJobs.php page but nothing comes over.

I know this is a lot of code, but I hope someone can help me solve this since I don't have a clue why it's not working.

No semicolon at lines :

var scriptPath = "<?php echo $jobJSPath[0]; ?>" 
var execMessage = "An unknown falure has accourd while executing, will be executed once more"

in line :

var hasOutput = <?php echo json_encode($allOutputVarName);?>;

you should change it to :

var hasOutput = JSON.parse("<?php echo json_encode($allOutputVarName);?>");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM