2014-03-25 69 views
1

返回從一個函數每次最終成爲未定義的函數的響應!!jquery的AJAX功能未定義

var result = Checkusers();(result is undefined) 

function CheckUser() { 

    var EmpName = $("#txtName").val(); 

    $.ajax({   
     type: "POST", 
     url: location.pathname + "/UserExist", 
     data: "{Name:'" + EmpName + "'}", 
     contentType: "application/json; charset=utf-8", 
     datatype: "jsondata", 
     async: "true", 
     success: function (response) { 
      console.log(response.d); 
      var obj = eval('(' + response.d + ')'); 
      return obj; 
     }, 
     error: function (response) { 
      alert(response.status + ' ' + response.statusText);   
     } 
    }); 
} 

我打電話這個功能

var Result = CheckUser(); 
if(Result== false){ 
    //do something 
} else{ 
    //do something 
} 

我有這個努力從過去的日子!我在一節中讀到,這是因爲'Ajax是異步'。但我怎麼處理呢?

+0

你確定你的反應是一個對象?控制檯的輸出是什麼? –

+0

「真」或「假」取決於 – user3452210

回答

1

你最好通過一個回調函數到CheckUser

function CheckUser(callback) { 

    var EmpName = $("#txtName").val(); 

    $.ajax({   
     type: "POST", 
     url: location.pathname + "/UserExist", 
     data: "{Name:'" + EmpName + "'}", 
     contentType: "application/json; charset=utf-8", 
     datatype: "jsondata", 
     async: "true", 
     success: function (response) { 
      console.log(response.d); 
      var obj = eval('(' + response.d + ')'); 
      callback(obj); 
     }, 
     error: function (response) { 
      alert(response.status + ' ' + response.statusText); 
      callback(null);   
     } 
    }); 
} 

你可以這樣調用該函數爲使

CheckUser(function (res) { 
    if (res === null) { 
     //false 
    } else { 
     //true 
    } 
}); 
+0

它的工作感謝名單! – user3452210

0

錯字

Checkusers -with小號

CheckUser()-withoutš

+0

來吧這是錯誤的問題發佈!在真實的代碼中都是相同的! – user3452210

+0

無後顧之憂。我沒有下調或者什麼也沒有。每個人都可以犯錯:) –

0

變化

datatype:'jsondata' 

dataType: "json" 

由於AJAX是異步你不能返回這樣的數據。你需要的,如果你想從AJAX返回數據寫在阿賈克斯

$.ajax({ 
type: "POST", 
url: location.pathname + "/UserExist", 
data: "{Name:'" + EmpName + "'}", 
contentType: "application/json; charset=utf-8", 
dataType: "json", 
async: "true", 
success: function (response) { 
    //do your stuff here 

}, 
error: function (response) { 
    alert(response.status + ' ' + response.statusText); 
} 
}); 

的成功處理程序的事情,你應該使用async : false

function CheckUser() { 
var EmpName = $("#txtName").val(); 
var CheckUser; 
$.ajax({ 
    type: "POST", 
    url: location.pathname + "/UserExist", 
    data: "{Name:'" + EmpName + "'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    async: false, 
    // ... 
    success: function (jsonData) { 
     CheckUser = jsonData 
    } 
}); 
return CheckUser 
} 

但它不是一個好辦法,將凍結瀏覽器

+0

也試過,沒有工作! – user3452210

0

功能CheckUser()不具有任何return語句,這就是爲什麼你的結果總是不確定的。

傳遞迴調,而不是給你的函數和調用它在你的Ajax調用的成功或錯誤。

是這樣的:

function CheckUser(callback) { 

var EmpName = $("#txtName").val(); 

$.ajax({   
    type: "POST", 
    url: location.pathname + "/UserExist", 
    data: "{Name:'" + EmpName + "'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    async: "true", 
    success: function (response) { 
     console.log(response.d); 
     var obj = eval('(' + response.d + ')'); 
     callback(null, obj); 
    }, 
    error: function (response) { 
     alert(response.status + ' ' + response.statusText); 
     callback(response);   
    } 
}); 
} 

則:

var Result = CheckUser(function (err, data) { 
    // check if no err then process whatever data format you have 
});