zoukankan      html  css  js  c++  java
  • 065_VFPage中CallBack回调函数的解释

    关于JS 的回调函数解释: https://blog.csdn.net/baidu_32262373/article/details/54969696 

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

    顾名思义,就是执行完后再调用你的。通常是限制行父的函数,在执行子函数;

    一个很好的例子:callback(); 放到父函数中去

    <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代码,是为了解释回调的一个简单例子。

    JS如果想和control 交互的话使用的是@RemoteAction这个会在下篇文章中介绍;

    本次介绍的是在JS中直接操作数据,如一些SOQL的查询,一些数据的增删改的操作,这个就要使用Ajax Toolkit ,到官网下载 apex_ajax.pdf即可

    其中是分为两种方式,异步、同步:

    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的函数处理。

    同步调用格式:
    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);

    此刻,静下心来学习
  • 相关阅读:
    IOC注解开发与XML整合
    Spring的IOC注解开发入门2
    Spring的IOC注解开发入门1
    降维学习笔记
    决策树集成学习summary
    python shuffle
    为什么会突然难过
    保存为pickle
    gitlab被屏蔽问题
    selenium-历史(一)
  • 原文地址:https://www.cnblogs.com/bandariFang/p/9675334.html
Copyright © 2011-2022 走看看