2011-12-12 43 views
1

我想提醒ajax請求捕獲的返回值。它引用的web方法是返回true或false的布爾值,當我試圖在ajax方法之外訪問它時,它會給出一條消息「undefined」:?「未定義」提醒ajax呼叫響應,爲什麼?

 <script type="text/javascript" language="javascript"> 

     $(document).ready(function() { 
      var authInfo; 

      $.ajax({ 
       type: "POST", 
       url: "service.asmx/getAuthInfo", 
       data: "{}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (msg) { 
        authInfo = msg.d; 

       }, 


      }); 

      alert(authInfo);   

     }); 

    </script> 

爲什麼alert(authInfo)給我爲「undefined」?請幫忙 !

這段代碼在哪裏適合上述上下文?

if(auhthInfo){ 

         $(".ansitem").editable('FetchUpdate.aspx', { 

        style: 'background-color:inherit;', 
        type: 'textarea', 
        indicator: '<img src="spinner.gif">', 
        event: 'dblclick', 
        onblur: 'submit', 
        submitdata: function (value, settings) { 
         return { orgval: value}; 
         }, 

        }); 


        }; 
+0

我認爲你在服務器端有錯誤,通過FF上的螢火蟲或Chrome上的開發者工具檢查響應,可能是因爲無效的json也是,無論如何你需要檢查什麼服務器輸出 – haynar

回答

2

編輯來處理你的新代碼:

<script type="text/javascript" language="javascript"> 
    $(document).ready(function() { 
     var authInfo; 
     $.ajax({ 
      type: "POST", 
      url: "service.asmx/getAuthInfo", 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { 
       // alert(msg.d); // here it will work as it is only called when it succeeds. 
       MyHanlder(msg); 
      }, 
     }); 
     // alert(authInfo); // here authinfo has no value as the AJAX call may not have returned. 
    }); 

    function MyHandler(msg) { 
     if(msg.d){ 
      $(".ansitem").editable('FetchUpdate.aspx', { 
       style: 'background-color:inherit;', 
       type: 'textarea', 
       indicator: '<img src="spinner.gif">', 
       event: 'dblclick', 
       onblur: 'submit', 
       submitdata: function (value, settings) { return { orgval: value}; }, 
      }); 
     }; 
    } 
</script> 
+0

我編輯了這個問題,你可以檢查一下,告訴我最後一塊代碼塊在哪裏適合? –

+1

@Shane把它放在'alert(msg.d)'的位置,用'msg.d'替換'authInfo' –

+0

非常感謝,現在一切都好! –

3

你的「$阿賈克斯()」呼叫異步,直到響應從服務器返回因此結果是不可用的。

如果您將「alert()」放入「成功」回調中,它應該可以工作(如果HTTP事務有效)。

+0

那麼我該如何把條件那裏的邏輯? :/ –

+1

您可以將整個邏輯放入成功塊內或者你可以調用一個函數傳遞你想要使用的變量,並將你的邏輯移動到該函數 – Ajai

+2

@ShaneAdrianMuaz是的,就像Ajai說你會把所有的邏輯直接放在「成功」處理程序中,或者打個電話給功能,然後把邏輯放在那個函數中。重點在於,在瀏覽器調用「成功」處理程序來響應請求完成之前,它尚未完成。沒有辦法告訴瀏覽器「等待」異步請求完成。 – Pointy

1

看來:

alert(authInfo); 

當你的文件已經準備好立即運行。

但是,該變量在AJAX調用完成之前未被初始化。

嘗試警報移至:

$.ajax({ 
    type: "POST", 
    url: "service.asmx/getAuthInfo", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (msg) { 
     authInfo = msg.d; 
     alert(authInfo); 
    }, 
}); 

如果你需要做任何的價值越來越複雜,你可以嘗試重新分解代碼到另一個功能:

function onSuccess(msg) 
{ 
    if(msg.d) 
    { 
     window.alert('The value is true!'); 
    } 
    else 
    { 
     window.alert('The value is false!') 
    } 
} 

$.ajax({ 
    type: "POST", 
    url: "service.asmx/getAuthInfo", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: onSuccess, 
}); 
+0

我需要獲得authInfo來完成一些條件邏輯! –

+1

您需要在您的'success:'函數中評估'authInfo',或從那裏調用另一個函數。 –

+0

已更新回答.. –

1

請求並且您通過ajax調用得到的響應是asynchronous。我認爲不可能在就緒函數結束時提醒您獲得響應的值,因爲您不確定在函數完成執行前您將獲得您的響應。

1

在實際的ajax調用返回之前,您正在提醒authInfo變量。如果你試試這個:

success:function(msg) { 
    authInfo = msg.d; 
    alert(authInfo); 
} 

我想你會得到正確的結果。

1

因爲AJAX調用是異步完成,警報並沒有在執行的時間價值。如果將警報放入成功函數中,您應該看到相應的結果。我還注意到,在成功函數參數後面的$ .ajax參數中有一個額外的逗號。