2010-11-12 5 views
1

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

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

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

+0

Из моего опыта вы не можете так поступать (кто-то может меня поправить), вам нужно запрограммировать все, что нужно, чтобы сделать по-другому, чтобы обратный вызов AJAX мог справиться с этим. –

+0

Что такое outputString? есть ли цена? – subosito

ответ

0

Вы можете установить outputString внутри функции обратного вызова Ajax, как это:

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

Прошло два дня, когда я задал вопрос. Извините за поздний ответ. Я ценю с вашей помощью. Я предупреждаю значение данных ['period_id'] [0] в функции, и я также предупреждаю об этом из функции, используя outputString. То, что у меня есть, из функции alert работает перед внутренним предупреждением. Посещение БД внутри ajax занимает секунду или два, чтобы предупредить ответ. Так что в этом есть проблема последовательности. Спасибо за помощь. Озлем. – user403295

0

В $(data).eachprice всегда будет иметь последнее значение индекса. Я предполагаю, что вам понадобятся все значения индекса. Как @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 Chaining

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

} 
hello().world("World!"); 
0

Asynchronous JavaScript и XML является Асинхронный.

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

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

Смежные вопросы