обработка возвращаемого значения AJAX - PullRequest
1 голос
/ 12 ноября 2010

Я много искал, но ничего не смог найти. Функция ниже делает запрос к базе данных и получает данные через $ .post. Я получаю данные во внутренней функции, но мне нужно, чтобы они равнялись некоторым данным переменной outputString Если вы прочитаете код, вы увидите, что мне нужно.

    function calculatePrice(checkInDate, checkOutDate, nights){

        var rentDetailsArr       = <?php echo json_encode($periods); ?>;
        var minDays = ["<?php echo implode('","',$minDaysArr)?>"];
        var outputString ="";   

            var stDate  = "2010-02-10";
            var endDate = "2010-09-29";

            var xxx = $.post('testData.php', 
                { opType:"getSelectedPeriodDetails", startDate: stDate, endDate: endDate  }, 
                    function getData(data) {

                        $(data).each (function (index){
                            //I am able to get the data in here.but i need to equal it to outputString variable.
                            var price = data['period_id'][0];
                            //alert(price);
                            alert(price);                               
                        });     
                    },  "json");

        //when I equal $.post return to xxx variable, the return is as [object XMLHttpRequest ]
        alert(xxx);

        return outputString;    
    }

Теперь, как я могу обрабатывать данные за пределами? Если я могу, как я буду разбирать это? Извините, если я использовал неправильные термины при объяснении проблемы. Я не очень знаком с, но я все еще могу использовать.

Ответы [ 3 ]

0 голосов
/ 12 ноября 2010

В $(data).each price всегда будет иметь последнее значение индекса. Я предполагаю, что вам понадобятся все значения индекса. Как ответил @alififty, вы можете сохранить его в outputString, а затем сделать outputString массивом, в котором будут храниться все значения индекса:

var outputString = [];

$(data).each (function (index){
    // set price to outputString
    outputString.push(data['period_id'][0]);
}); 

Кроме того, если вы хотите что-то сделать с результатами, такими как:

var price = calculatePrice("xxxx", "xxxx", "xxxx").Tax();

Тогда вы можете сделать это с помощью Цепочка функций JavaScript

function hello() {
  if(!(this instanceof hello))
        return new hello();
  var _hello = "Hello ";
  this.world = function(message) {
    alert(_hello + message);
  }

}
hello().world("World!");
0 голосов
/ 06 мая 2011

Асинхронный JavaScript и XML равен Асинхронный .

Функция, которую вы передаете post, запускается при получении ответа HTTP , а не сразу.

Вы должны обработать данные внутри этой функции обратного вызова. Вы не можете вернуться из него, потому что слишком поздно .

0 голосов
/ 12 ноября 2010

Вы можете установить outputString внутри функции обратного вызова ajax следующим образом:

$(data).each (function (index){
    // set price to outputString
    outputString = data['period_id'][0];
});   
...