065_VFPage中CallBack回調函數的解釋

關於JS 的回調函數解釋: https://blog.csdn.net/baidu_32262373/article/details/54969696 javascript

https://www.cnblogs.com/gaosheng-221/p/6045483.html html

 

顧名思義,就是執行完後再調用你的。一般是限制行父的函數,在執行子函數;前端

一個很好的例子:callback(); 放到父函數中去java

<html> 
  
<head> 
  
<title>(callback)</title> 
<script language="javascript" type="text/javascript"> 
function a(callback) 
{    
    alert("I am parent a!"); 
    alert("Invoke callback"); 
   callback();
} 
function b(){ 
 alert("I am callback B");  
} 
function c(){ 
alert("I am callback c"); 
  
} 
  
function test() 
{ 
   a(b); 
   a(c); 
} 
  
</script> 
</head> 
  
<body> 
<h1>Learn Callback</h1> 
<button onClick=test()>click me</button> 
<p>Now you can see the two callback.</p> 
</body> 
  
</html>

  以上的例子是全JS代碼,是爲了解釋回調的一個簡單例子。ajax

JS若是想和control 交互的話使用的是@RemoteAction這個會在下篇文章中介紹;服務器

本次介紹的是在JS中直接操做數據,如一些SOQL的查詢,一些數據的增刪改的操做,這個就要使用Ajax Toolkit ,到官網下載 apex_ajax.pdf便可session

其中是分爲兩種方式,異步、同步:異步

1.首先咱們先鏈接到API中函數

<apex:page>
<script src="../../soap/ajax/44.0/connection.js"
type="text/javascript"></script>
<script>
sforce.connection.sessionId='{!GETSESSIONID()}';
...
</script>
...
</apex:page>

  

同步調用和異步調用的區別爲:同步調用爲當向服務器端發送請求後,須要一直等到服務器端返回結果,並針對結果進行後期的處理;異步調用爲當向服務器發送請求後,能夠繼續進行其餘的處理,當服務器有調用返回結果後,再進行結果處理。異步調用須要在API call中添加一個參數用來作call back的函數處理。.net

同步調用格式:
sforce.connection.method("argument1","argument2",...);  Examples of Synchronous Calls

Example

<html>
<head>
<script src="/soap/ajax/44.0/connection.js"></script>
<script>
var contactId = "{!Contact_ID}";
function initPage() {
try{
var contact = sforce.connection.retrieve("AccountId", "Contact", [contactId])[0];
var accountsRetrieved = sforce.connection.retrieve("Id, Name, Industry,
LastModifiedDate", "Account", [contact.AccountId]);
if (accountsRetrieved.length > 0) {
var account = accountsRetrieved.records[0];
document.body.innerHTML += "Account name: <a href='/" + account.Id;
document.body.innerHTML += "' target='_blank'>" + account.Name + "</a><br>;
document.body.innerHTML += "Industry: " + account.Industry + "<br>";
}
} catch (e) {
document.body.innerHTML += "Error retrieving contact information";
document.body.innerHTML += "<br>Fault code: " + e.faultcode;
document.body.innerHTML += "<br>Fault string: " + e.faultstring;
}
}
</script>
</head>
<body onload="initPage();">
</body>
</html>

  

異步調用格式:
sforce.connection.method("argument1","argument2",...,"callback_function");

var result = sforce.connection.query("Select Name,Id from User", {
onSuccess : function(result) {
var records = result.getArray("records");
for (var i=0; i<records.length; i++) {
var record = records[i];
log(record.Name + " -- " + record.Id);
}
},
onFailure : function(error) {
log("An error has occurred " + error);
}
});

  

由於調用有可能出現異常,同步和異步的異常處理以下:
同步異常處理爲在調用處使用try catch 來捕獲異常

異步異常處理爲異步的callback result提供了一個onFailure配置,當出現異常後,會執行onFailure配置的方法,成功會執行onsuccess方法
由於異步調用爲結果何時返回,客戶端何時處理,當後臺處理特別慢的狀況下,前端等待時間太長會很不友好,異步調用提供了一個timeout配置屬性,用來設置異步調用最長時間,單位是以毫秒爲單位,最小值爲1
完整異步調用格式
var callback = {onSuccess: handleSuccess, onFailure: handleFailure,timeout:1000};
function handleSuccess(result) {}
function handleFailure(error) {}
sforce.connection.query("Select name from Account", callback);

相關文章
相關標籤/搜索