鍍金池/ 問答/ HTML問答
厭遇 回答

對后端來說,同步加載沒有問題,因為

  1. 模塊都在本地,等待時間就是硬盤時間;
  2. 一旦啟動之后一般不會關,可靠性比啟動時間重要。

對前端來說

  1. 模塊都在服務器上,需要通過網(wǎng)絡請求,太慢;
  2. 同步xhr會堵塞瀏覽器,假死的話用戶體驗很差,首屏時間很重要。

設計es6模塊的時候,并沒有強行指定同步或異步。但是所有瀏覽器對<script type="module"></script>都會默認加defer,所以可以認為也是異步的。

萌吟 回答

新進展,目前發(fā)現(xiàn)有問題的貌似都是阿里云服務器,是需要添加什么配置嗎。。

尕筱澄 回答

javascript是沒有塊級作用域的,也就是說你在if語句內(nèi)return和你在if語句外return是一樣的,所以本質(zhì)上是return導致了其后的代碼不再執(zhí)行了,希望能幫到你

命于你 回答

在onload中拿到值以后,在onshow方法里面進行跳轉,這種方法試過么?

枕頭人 回答

你解決了嗎,我也遇到這個問題,窗口大小調(diào)整就正常了,但是不調(diào)整就不出來分頁條

薄荷糖 回答

網(wǎng)上查了好多帖子,終于搞定了,以饗后來者~
PS.如果確認自己各項參數(shù)都對,但是還是提示簽名錯誤,更新一下API密鑰,然后就ok了,微信那邊好像有緩存

創(chuàng)建一個沙箱驗收的類,擴展自WxPayDataBase

class Sandbox extends WxPayDataBase{

    //設置對象的屬性
    public function s_setValues($k, $v){
        $this->values[$k] = $v;
    }

    //讀取對象的屬性
    public function s_getValues($k){
        return $this->values[$k];
    }
    
    //獲取密鑰API
    public static function getSignKey($input, $mch_key){

        console_log( '1:'.json_encode($input->values) );
        
        //提交業(yè)務
        $url = 'https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey';
        
        //生成簽名
        $input->setSign($mch_key);
        console_log( '2:'.json_encode($input->values) );
        
        //$values = $input->GetValues();
        //console_log( '3:'.json_encode($values) );
        
        $xml = $input->array2xml();
        console_log( '4:'.$xml );

        //向微信請求接口
        $result = self::postXmlCurl($xml, $url);
        console_log( json_encode($result) );

        $result = $input->xml2array($result);
        console_log( json_encode($result) );

        return $result;
    }

    

    /**
     * 
     * 產(chǎn)生隨機字符串,不長于32位
     * @param int $length
     * @return 產(chǎn)生的隨機字符串
     */
    public static function getNonceStr($length = 32) 
    {
        $chars = "abcdefghijklmnopqrstuvwxyz0123456789";  
        $str ="";
        for ( $i = 0; $i < $length; $i++ )  {  
            $str .= substr($chars, mt_rand(0, strlen($chars)-1), 1);  
        } 
        return $str;
    }


    /**
     * 以post方式提交xml到對應的接口url
     * 
     * @param string $xml  需要post的xml數(shù)據(jù)
     * @param string $url  url
     * @param bool $useCert 是否需要證書,默認不需要
     * @param int $second   url執(zhí)行超時時間,默認30s
     * @throws WxPayException
     */
    private static function postXmlCurl($xml, $url, $useCert = false, $second = 30)
    {    
        $ch = curl_init();
        
        //設置超時
        curl_setopt($ch, CURLOPT_TIMEOUT, $second);

        //設置訪問的網(wǎng)址
        curl_setopt($ch, CURLOPT_URL, $url);
        
        //skysowe_modifid
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        
        //設置header
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        
        //要求結果為字符串且輸出到屏幕上
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

        console_log( 'cert:'.$useCert );
        if($useCert == true){
            //設置證書
            //使用證書:cert 與 key 分別屬于兩個.pem文件
            curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
            curl_setopt($ch,CURLOPT_SSLCERT, WxPayConfig::SSLCERT_PATH);
            curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
            curl_setopt($ch,CURLOPT_SSLKEY, WxPayConfig::SSLKEY_PATH);
        }
        
        //post提交方式
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
        //console_log( 'xml:'.json_encode($xml) );

        //運行curl
        $data = curl_exec($ch);
        //console_log( 'curl_result:'.json_encode($data) );
        
        //返回結果
        if($data){
            curl_close($ch);
            return $data;
        } else { 
            $error = curl_errno($ch);
            curl_close($ch);
            throw new WxPayException("curl出錯,錯誤碼:$error");
            //console_log( 'curl_error:'.$error );
        }
    }


    /**
     * 輸出xml字符
     * @throws WxPayException
    **/
    public function array2xml()
    {
        if(!is_array($this->values) 
            || count($this->values) <= 0)
        {
            throw new WxPayException("數(shù)組數(shù)據(jù)異常!");
        }
        
        $xml = "<xml>";
        foreach ($this->values as $key=>$val)
        {
            if (is_numeric($val) || $key=="nonce_str" || $key=="sign" ){
                $xml.="<".$key.">".$val."</".$key.">";
            }else{
                $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
            }
        }
        $xml.="</xml>";
        return $xml; 
    }

    /**
     * 將xml轉為array
     * @param string $xml
     * @throws WxPayException
     */
    public function xml2array($xml)
    {    
        if(!$xml){
            throw new WxPayException("xml數(shù)據(jù)異常!");
        }
        //將XML轉為array
        //禁止引用外部xml實體
        libxml_disable_entity_loader(true);
        $this->values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);        
        return $this->values;
    }

}

然后獲取sandbox_signkey

    //沙箱用例:0 獲取驗簽秘鑰
    $sandbox_test = new Sandbox();

    $sandbox_test->s_setValues('mch_id', WxPayConfig::MCHID);
    $sandbox_test->s_setValues('nonce_str', $sandbox_test->getNonceStr());

    //debug
    console_log( $sandbox_test->s_getValues('mch_id') );
    console_log( $sandbox_test->s_getValues('nonce_str') );
    console_log( WxPayConfig::KEY );

    $rs = Sandbox::getSignKey($sandbox_test, WxPayConfig::KEY);

    //debug
    echo json_encode($rs);
    echo $rs['sandbox_signkey'];

    exit;
陌南塵 回答

你的 roleList長什么樣
你可以嘗試去掉:label=“”
直接:value="item.roleName"

孤慣 回答
現(xiàn)在的需求是已經(jīng)知道了被選中的節(jié)點的id了 怎樣遍歷原data 讓選中的節(jié)點的"selected": false的selected屬性為true
針對這個不是遞歸就完了嗎。。還要怎么處理梳理
var data = [
  {
    id: '00',
    text: '工作臺',
    state: {
      selected: false,
    },
  },
  {
    id: '01',
    text: '企業(yè)管理',
    children: [
      {
        id: '0101',
        text: '企業(yè)信息管理',
        state: {
          selected: false,
        },
      },
      {
        id: '0102',
        text: '企業(yè)證照管理',
        state: {
          selected: false,
        },
      },
    ],
  },
]

var selected = ['00', '0101']

var iterative = (data, callback) => {
  if (Array.isArray(data)) {
    data.forEach(item => {
      if (item.children && item.children.length) {
        iterative(item.children, callback)
      }
      callback(item)
    })
    return
  }
  callback(data)
}

iterative(data, item => {
  if (selected.includes(item.id)) {
    item.state.selected = !item.state.selected
  }
})
console.log(data)
晚風眠 回答

不知樓主的問題是否解決了~~~先回答一波吧,可能后續(xù)有人也會需要。今天在做相同的功能時也遇到了同樣的問題,下載的pdf文件一直是空白,后來查閱了很多資料發(fā)現(xiàn):在發(fā)送請求是需要設置responseType: arraybuffer,下載的才會又內(nèi)容。如:
axios.get(url, {
responseType: arraybuffer
}).then()

冷咖啡 回答
let data =  [{
    "name":"聯(lián)系方式",
    "value":"400-0456-111"
},
{
    "name":"官網(wǎng)地址",
    "value":"www.baidu.com "
},
{
    "name":"企業(yè)地址",
    "value":{
        "address":"廣東省深圳市南山區(qū)",
    }
}];
let result = data.find(ele=>ele.name === '聯(lián)系方式');

這樣?

小眼睛 回答

不知道你解決了沒有, 推薦一個項目里曾經(jīng)用過的方式, 不需要直接操作dom元素, 使用Subject來傳遞輸入值, 然后通過rxjs的操作符完成具體的操作.

    <input type="text" #searchInput (keyup)="search.next(searchInput.value)">
    
    search: Subject<string> = new Subject<string>();
    
    ngOnInit() {
        this.search.asObservable().debounceTime(400).filter().map().subscribe();
    }
孤毒 回答
  new Vue({
      el: '#app',
      i18n,
      template: '<App/>',
      components: { App }
  });
話寡 回答

在鉤子里獲取不了,受影響行是操作完mysql之后的返回結果,目前只能在鉤子外自己手動獲取到然后處理。

撿肥皂 回答

這說明safri中的tr不支持背景漸變。
可以嘗試用tr背景透明,并給其加上偽元素::after,然后將偽元素設置為z-index=-1的塊級元素,在這個div上應用背景漸變。

溫衫 回答
function setObjfromText(obj,text,value){
    let temp=obj
    let textgroup = text.split('.')
    let l = textgroup.length
    for(let i=0;i<l-1;i++){
      temp[textgroup[i]] = typeof(temp[textgroup[i]])=='object'?temp[textgroup[i]]:{}
      temp = temp[textgroup[i]]
    }
    temp[textgroup[l-1]] = temp[textgroup[l-1]] | value
    return obj
}