在从ajax调用获取结果之前执行Javascript

时间:2012-09-24 07:50:37

标签: php javascript ajax

我有以下显示会话数据的代码。面临的问题是即使会话有值而且ajax获取该数据我在函数调用下面的警报getValFromSession(qes)总是显示空数据.I认为这是由于在javascript中异步执行ajax。所以我放了一些额外的代码,如函数
所示 getValFromSession(qid)。我如何克服这个异步问题?

var qes=$('#qsid_'+q).val();
var res=getValFromSession(qes);

alert(res);//always shows null value

$('#select_'+).val(parseInt(res));   


function getValFromSession(qid)
{
 return $.ajax({
       url  : site_url_js+"controller/getValFromSession",
       type : "POST",
       data : "qid="+qid,   
       cache: false,
       async:   false
}).responseText;
}

/*controller*/
function getValFromSession()
{
   echo $_SESSION['time'][$_REQUEST['qid']];
}

3 个答案:

答案 0 :(得分:3)

试试这个:

var qes=$('#qsid_'+q).val();
var res=getValFromSession(qes);

function getValFromSession(qid)
{
   $.ajax({
       url  : site_url_js+"controller/getValFromSession",
       type : "POST",
       data : "qid="+qid,   
       cache: false,
       async:   false,
       success: function(data) {
            alert(data); // alert here in successHandler
            $('#select_'+).val(parseInt(data)); 
       }
   })
}

/*controller*/
function getValFromSession()
{
   echo $_SESSION['time'][$_REQUEST['qid']];
}

希望这有帮助。

答案 1 :(得分:1)

$.ajax为您提供了successerrorcomplete回调处理程序。在这些处理程序中填充响应文本,因为您实现的方式是同步的,并且会立即执行而不是在请求完成后执行。

Docs

答案 2 :(得分:0)

您可以将代码放入函数中,并在AJAX成功事件中调用该函数,如下所示

---
---
return $.ajax({         
url  : site_url_js+"controller/getValFromSession",         
type : "POST",         
data : "qid="+qid,            
false,      
async:   false,
success: finalfunction
---
---


function finalfunction(res)
{
  alert(res);//always shows null value        
  $('#select_'+).val(parseInt(res)); 
}