2010-04-19 52 views
0

我覺得我沒有得到正確的語法來編寫一個javascript函數並調用它來將它的返回值賦給一個變量。調用和編寫jQuery/javascript函數

我的功能是:

getObjName(objId){ 
    var objName =""; 
$.ajax({ 
    type : "GET", 
    url : "Object", 
    dataType: 'json', 
    data : "objId="+objId, 
    success : function(data) { 
    objName = data; 
    } 
}); 
    return objName; 
} 

我想調用它,它分配給一個變量:

var objName = getObjName(objId); 

但是Eclipse是告訴我,「功能getObjName(有的話) undefined「

回答

4

這裏有兩個錯誤。首先,您需要在getObjName之前添加function

其次,您不能異步返回變量。如果你絕對必須做到這一點,你可以設置AJAX是同步的,但是這將阻止正在運行的線程的Ajax調用傳遞到服務器的整個時間。

function getObjName(objId){ 
    var objName =""; 
    $.ajax({ 
     async: false, 
     type : "GET", 
     url : "Object", 
     dataType: 'json', 
     data : "objId="+objId, 
     success : function(data) { 
      objName = data; 
     } 
    }); 
    return objName; 
} 
+1

@OP:** **強烈建議避免同步請求,因爲馬特說,他們完全鎖住瀏覽器的用戶界面。相反,將回調引用傳遞給該函數,並讓ajax成功處理程序調用回調。 'getObjName'然後變成(有效)'requestObjName'並且響應在一段時間後回來。這是你思考的轉變,但是一旦你掌握了它的內容,它就非常強大。 – 2010-04-19 06:28:10

1

具有與function關鍵字來聲明功能:

function getObjName(objId){ 
    //... 
} 

但無論如何,你的代碼是行不通的。 Ajax調用異步完成這意味着,函數getObjName將返回,在Ajax調用完成之前將爲空。

您可以定義您的函數來接受回調,例如:

getObjName(objId, cb){ 
    $.ajax({ 
     type : "GET", 
     url : "Object", 
     dataType: 'json', 
     data : "objId="+objId, 
     success : cb // <-- call the callback on success 
    }); 
} 

再後來:

var objName; 
getObjName(objId, function(data) { 
    objName = data; // <-- objName refers to the the variable defined 
         // outside this function and gets set 
         // after the Ajax call is finished 
});