kms activate Windows Office

Option 1. Using Tools

https://github.com/jm33-m0/kms-activate/releases

Option 2. Script for Windows Ativation


@echo off
title Activate Windows 10 ALL versions for FREE!&cls&echo ============================================================================&echo #Project: Activating Microsoft software products for FREE without software&echo ============================================================================&echo.&echo #Supported products:&echo - Windows 10 Home&echo - Windows 10 Home N&echo - Windows 10 Home Single Language&echo - Windows 10 Home Country Specific&echo - Windows 10 Professional&echo - Windows 10 Professional N&echo - Windows 10 Education N&echo - Windows 10 Education N&echo - Windows 10 Enterprise&echo - Windows 10 Enterprise N&echo - Windows 10 Enterprise LTSB&echo - Windows 10 Enterprise LTSB N&echo.&echo.&echo ============================================================================&echo Activating your Windows...&cscript //nologo slmgr.vbs /upk >nul&cscript //nologo slmgr.vbs /cpky >nul&wmic os | findstr /I "enterprise" >nul
if %errorlevel% EQU 0 (cscript //nologo slmgr.vbs /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43 >nul&cscript //nologo slmgr.vbs /ipk DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4 >nul&cscript //nologo slmgr.vbs /ipk WNMTR-4C88C-JK8YV-HQ7T2-76DF9 >nul&cscript //nologo slmgr.vbs /ipk 2F77B-TNFGY-69QQF-B8YKP-D69TJ >nul&cscript //nologo slmgr.vbs /ipk DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ >nul&cscript //nologo slmgr.vbs /ipk QFFDN-GRT3P-VKWWX-X7T3R-8B639 >nul) else wmic os | findstr /I "10 pro" >nul
if %errorlevel% EQU 0 (cscript //nologo slmgr.vbs /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX >nul&cscript //nologo slmgr.vbs /ipk MH37W-N47XK-V7XM9-C7227-GCQG9 >nul) else wmic os | findstr /I "home" >nul
if %errorlevel% EQU 0 (cscript //nologo slmgr.vbs /ipk TX9XD-98N7V-6WMQ6-BX7FG-H8Q99 >nul&cscript //nologo slmgr.vbs /ipk 3KHY7-WNT83-DGQKR-F7HPR-844BM >nul&cscript //nologo slmgr.vbs /ipk 7HNRX-D7KGG-3K4RQ-4WPJ4-YTDFH >nul&cscript //nologo slmgr.vbs /ipk PVMJN-6DFY6-9CCP6-7BKTT-D3WVR >nul) else (echo.)
set i=1
:server
if %i%==1 set KMS_Sev=kms7.MSGuides.com
if %i%==2 set KMS_Sev=kms8.MSGuides.com
if %i%==3 set KMS_Sev=kms9.MSGuides.com
if %i%==4 goto notsupported
cscript //nologo slmgr.vbs /skms %KMS_Sev% >nul&echo ============================================================================&echo.&echo.
cscript //nologo slmgr.vbs /ato | find /i "successfully" && (echo.&echo ============================================================================&echo.&echo #My official blog: MSGuides.com&echo.&echo #How it works: bit.ly/kms-server&echo.&echo #Please feel free to contact me at [email protected] if you have any questions or concerns.&echo.&echo #Please consider supporting this project: donate.msguides.com&echo #Your support is helping me keep my servers running everyday!&echo.&echo ============================================================================&choice /n /c YN /m "Would you like to visit my blog [Y,N]?" & if errorlevel 2 exit) || (echo The connection to my KMS server failed! Trying to connect to another one... & echo Please wait... & echo. & echo. & set /a i+=1 & goto server)
explorer "http://MSGuides.com"&goto halt
:notsupported
echo ============================================================================&echo.&echo Sorry! Your version is not supported.&echo.
:halt
pause >nul

Option 3. Script for Office Activation



@echo off
title Activate Microsoft Office 2016 ALL versions for FREE!&cls&echo ============================================================================&echo #Project: Activating Microsoft software products for FREE without software&echo ============================================================================&echo.&echo #Supported products:&echo - Microsoft Office Standard 2016&echo - Microsoft Office Professional Plus 2016&echo.&echo.&(if exist "%ProgramFiles%\Microsoft Office\Office16\ospp.vbs" cd /d "%ProgramFiles%\Microsoft Office\Office16")&(if exist "%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs" cd /d "%ProgramFiles(x86)%\Microsoft Office\Office16")&(for /f %%x in ('dir /b ..\root\Licenses16\proplusvl_kms*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul)&(for /f %%x in ('dir /b ..\root\Licenses16\proplusvl_mak*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul)&echo.&echo ============================================================================&echo Activating your Office...&cscript //nologo ospp.vbs /unpkey:WFG99 >nul&cscript //nologo ospp.vbs /unpkey:DRTFM >nul&cscript //nologo ospp.vbs /unpkey:BTDRB >nul&cscript //nologo ospp.vbs /unpkey:CPQVG >nul&cscript //nologo ospp.vbs /inpkey:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99 >nul&set i=1
:server
if %i%==1 set KMS_Sev=kms.chinancce.com
if %i%==2 set KMS_Sev=kms.chinancce.com
if %i%==3 set KMS_Sev=kms.chinancce.com
if %i%==4 goto notsupported
cscript //nologo ospp.vbs /sethst:%KMS_Sev% >nul&echo ============================================================================&echo.&echo.
cscript //nologo ospp.vbs /act | find /i "successful" && (echo.&echo ============================================================================&echo.&echo #My official blog: MSGuides.com&echo.&echo #How it works: bit.ly/kms-server&echo.&echo #Please feel free to contact me at [email protected] if you have any questions or concerns.&echo.&echo #Please consider supporting this project: donate.msguides.com&echo #Your support is helping me keep my servers running everyday!&echo.&echo ============================================================================&choice /n /c YN /m "Would you like to visit my blog [Y,N]?" & if errorlevel 2 exit) || (echo The connection to my KMS server failed! Trying to connect to another one... & echo Please wait... & echo. & echo. & set /a i+=1 & goto server)
explorer "http://MSGuides.com"&goto halt
:notsupported
echo.&echo ============================================================================&echo Sorry! Your version is not supported.&echo Please try installing the latest version here: bit.ly/downloadmsp
:halt
pause >nul

Pivot và Unpivot trong SQL Server và DW

Giả sử ta muốn tính tổng số tiền của mổi sản phẩm theo tháng dựa vào số liệu sau:

OrderIDProductIDNameValueQualityPostingDate
ORD0011Product A9000122019-11-11
ORD0011Product A5000022019-11-11
ORD0012Product B800000052019-10-10
ORD0023Product C900000012019-12-12
ORD0021Product A9000162019-09-09

Sau khi query thì được kết quả như sau:

ProductIDName123456789101112
1Product A0000000014400002080000
2Product B000000000000
3Product C000000000009000000

Một số câu query về PIVOT và UNPIVOT cho câu hỏi trên

-- drop table #yourtable2
-- drop table #PIVOT_TABLE
DECLARE @json NVARCHAR(MAX) =   
N'[
    {
        "OrderID":"ORD001",
        "ProductID":1,
        "Name":"Product A",
        "Value":50000,
        "Quality": 2,
        "PostingDate": "2019-11-11"
    },
    {
        "OrderID":"ORD001",
        "ProductID":2,
        "Name":"Product B",
        "Value":8000000,
        "Quality": 5,
        "PostingDate": "2019-10-10"
    },
    {
        "OrderID":"ORD002",
        "ProductID":3,
        "Name":"Product C",
        "Value":9000000,
        "Quality": 1,
        "PostingDate": "2019-12-12"
    },
    {
        "OrderID":"ORD002",
        "ProductID":1,
        "Name":"Product A",
        "Value":9000,
        "Quality": 16,
        "PostingDate": "2019-09-09"
    }
]
';
SELECT * 
INTO #YourTable2
FROM  OPENJSON ( @json )  
WITH (   
    OrderID  varchar(8) '$.OrderID',  
    ProductID  int '$.ProductID',  
    [Name] varchar(200) '$.Name',  
    [Value] int '$.Value',
    [Quality] int '$.Quality',
    [PostingDate] DATETIME '$.PostingDate'
) 

INSERT into #YourTable2(OrderID,ProductID,[Name],[Value] ,[Quality],[PostingDate]) 
VALUES ('ORD001', 1, 'Product A', 9000, 12, '2019-11-11')


SELECT *
INTO #PIVOT_TABLE
FROM 
(
  SELECT  top 10 [ProductID], [Name], month( PostingDate) as [FMonth], sum([value] * [Quality] ) as Cost
    FROM #YourTable2
  group by [ProductID], [Name], month( PostingDate)
  
) AS [data]
PIVOT 
(
 SUM([Cost])
 FOR [FMonth] IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
) AS [pivotTable]


select *, [value] * [Quality]  as Cost from #YourTable2 --where 

select * from #PIVOT_TABLE

-- Unpivot the table.  
SELECT [ProductID], [Name], FMonth, Cost 
FROM   
   (SELECT * 
   FROM #PIVOT_TABLE) p  
UNPIVOT  
   (Cost FOR FMonth IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
) AS unpvt;  


drop table #yourtable2
drop table #PIVOT_TABLE

Concatenate column value to a string base on Grouping

samples, we have this rows in DB

ID Name Value
1 A 4
1 B 8
2 C 9

We want to group this in to 2 rows group by Id, like this

ID NameValues
1 A:4, B:8
2 C:9

This is 4 solutions for this:

--CREATE TABLE #YourTable ([ID] INT, [Name] CHAR(1), [Value] INT)
--INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'A',4)
--INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'B',8)
--INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (2,'C',9)
DECLARE @json NVARCHAR(MAX)
SET @json =   
  N'[
        {
            "Id":1,
            "Name":"A",
            "Value":4
        },
        {
            "Id":1,
            "Name":"B",
            "Value":8
        },
        {
            "Id":2,
            "Name":"C",
            "Value":9
        }
    ]
' 
   
SELECT * 
INTO #YourTable
FROM  OPENJSON ( @json )  
WITH (   
    Id  int '$.Id',  
    [Name] varchar(200) '$.Name',  
    [Value] int '$.Value'
) 
select * from #YourTable


--forSQL Server 2017 and later
SELECT  [ID], STRING_AGG( [Name] + ':' +  CAST([Value] AS VARCHAR) , ', ')
FROM #YourTable 
GROUP BY ID

--forSQL Server 2017 before that
SELECT 
  [ID],
  STUFF((
    SELECT ', ' + [Name] + ':' + CAST([Value] AS VARCHAR(MAX)) 
    FROM #YourTable 
    WHERE (ID = Results.ID) 
    FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
  ,1,2,'') AS NameValues
FROM #YourTable Results
GROUP BY ID

SELECT 
  [ID],
  STUFF( (
    SELECT ', ' + [Name] + ':' + CAST([Value] AS VARCHAR(MAX)) 
    FROM #YourTable 
    WHERE (ID = Results.ID) 
    FOR XML PATH(''),TYPE ).value('.','VARCHAR(MAX)')
  ,1,2,'') AS NameValues
FROM #YourTable Results
GROUP BY ID

SELECT 
  [ID],
  STUFF( (
    SELECT ', ' + [Name] + ':' + CAST([Value] AS VARCHAR(MAX)) 
    FROM #YourTable 
    WHERE (ID = Results.ID) 
    FOR XML PATH('') ), 1,2,'') AS NameValues
FROM #YourTable Results
GROUP BY ID


DROP TABLE #YourTable

Without Grouping you can do this for name columns

We wanna select all items like : A:4, B:8, C:9
You can use below SQL

DECLARE @result varchar(max)
select @result = coalesce(@result + ', ', '') + [Name] + ':' +  CAST([Value] AS VARCHAR) from #YourTable
select @result as Names

--or this way in SQL Server 2017 or later
select STRING_AGG( [Name] + ':' +  CAST([Value] AS VARCHAR) , ', ') from #YourTable

Đặc sản Hạt điều Bình Phước tại Đà Nẵng

🌺🌺Hạt điều rang muối 🌼🌼Món ngon không thể thiếu trong dịp tết 🌼🌼
Bên mình chỉ bán duy nhất hàng loại 1 bao ngon, 10 hạt như 1 nhé vì được chọn lựa rất kỹ nè.
💰💰💰
135k/hộp 0.5kg điều nguyên hạt.
80k/hộp 0.5kg điều vỡ đôi.

Sỉ từ 5kg giá lh, mn rủ anh em bạn bè mua chung để có giá tốt nha,
Freeship nội thành Đà Nẵng nha.
👉👉👉Liên hệ : O38913381O ( Quế ) – Chính thức nghỉ bán Tết, mọi người liên hệ sau Tết nha. Cảm ơn.
👉👉👉 Facebook Đặc sản Hạt điều Bình Phước tại Đà Nẵng

SQL cơ bản

Một số bài học

Một số tutorial SQL cơ bản học theo kiểu tương tác

Javascript cơ bản: ES6 import, export các modules


Module là khái niệm mà Javascript ES6 đưa ra dùng để tách các phần code riêng rẽ với nhau ra, code trong 1 module thì chỉ chạy được trong module nếu không được export ra ngoài để dùng.

Tại sao lại sử dụng module trong Javascript

Source code viết bằng module thì việc đóng gói, bảo trì và tái sử sụng từng phần riêng rẻ của mỗi module sẽ trở nên dễ dàng hơn. Module hóa thì khi sử dụng thư viện được viết của người khác cũng trở nên dễ dàng và tránh lãng phí bộ nhớ khi ta chỉ cần load những phần cần thiết của thư viện vào code của mình thôi.

Ví dụ ta có file MyMath.js có 2 hàm cộng vào trừ, ES6 cho phép ta chỉ export 1 hàm ra ngoài là hàm cộng thôi, còn hàm trừ không cho phép dùng nơi khác thì ta làm như sau:

// MyMath.js
function cong(a, b) {
  return a + b;
}

function tru(a, b) {
  return a - b;
}

export { cong };

Bây giờ muốn dùng hàm cộng này tại nơi khác thì phải làm như thế nào?
Ta sẽ dùng hàm này trong file index.js, khi load file này trên trình duyệt thì ta phải dùng <script type=”module”> và cần dùng 1 web server để chạy file index.html sau:

<!DOCTYPE html>
<html>
  <head>
    <script type="module" src="index.js"></script>
  </head>
  <body></body>
</html>

ở file index.js ta sẽ import hàm cộng trong 2 dấu ngoặc nhọn {}

// index.js
import { cong } from './MyMath.js';

let result = cong(1, 2);
console.log(result);

Bay giờ nếu ta thử import thêm hàm trừ thì sẽ bị báo lỗi
Uncaught SyntaxError: The requested module ‘./MyMath.js’ does not provide an export named ‘tru’

// index.js
import { cong, tru } from './MyMath.js';

let result = cong(1, 2);
console.log(result);

Bay giờ ta muốn import mà không dùng dấu ngoặc {} thì như thế nào?
Nếu vậy khi export thì thêm default, mỗi file thì chỉ có export default 1 lần.
Giã sử ta thêm biến PI vào trong MyMath.js, export default và sử dụng ở index.js như sau:

// MyMath.js
function cong(a, b) {
  return a + b;
}

function tru(a, b) {
  return a - b;
}

export { cong };

const PI = 3.1415926535;
export default PI;
// index.js
import { cong } from './MyMath.js';
import PI from './MyMath.js';

let result = cong(1, 2);
console.log(result);

console.log(PI);

Hay cách import ngắn gọn hơn là

// index.js
import PI, { cong } from './MyMath.js';

let result = cong(1, 2);
console.log(result);

console.log(PI);

Nếu ta dùng Webpack để đóng gói các file hoặc dùng require trong Node.js thì các import khác 1 chút là không cần phần mở rộng của file:

// index.js
import PI, { cong } from './MyMath';

let result = cong(1, 2);
console.log(result);

console.log(PI);

Xem thêm các bài viết sau:

Thứ tự chạy các lệnh trong Javascript Event loop

Javascript được thực thi ở 1 thread duy nhất (single-threaded), Javascript dùng Call stack để lưu các gọi các hàm lồng nhau, nếu nhiều hàm cùng cấp được gọi thì làm sao để biết trước được cái nào được gọi trước trong khi thực thi lệnh của Javascript, khi ấy khái niệm Task Queue của Javascript được sử dụng.
Task queue sẽ lấy các lệnh trong đồng bộ trước để thực thi (sync task), tiếp đến là các Promise và micro-task callback và kế là các lệnh bất đồng bộ (async task).
Bài tập theo các bạn thì kết quả xuất ra console theo thứ tự là gì ?

setTimeout(()=>console.log(1), 0);
Promise.resolve().then(v=>console.log(2));
console.log(3);

Xem các tài liệu sau để có câu trả lời hoặc chạy đoạn code trên nếu muốn thấy kết quả

Javascript cơ bản: ES6 Promise, Async/Await – cách giải quyết các Function lồng nhau phức tạp

Các function lồng nhau nhiều cấp trong Js là vấn đề muôn thuở, bạn thấy khi click button thì callback thực thi function f1, f1 lại gọi API lấy data để callback f2, f2 gọi API khác để lấy data callback f3, f3 gọi API để lưu trũ dữ liệu sau đó callback f4, …..
Cứ như vậy các function lồng vào nhau nhiều cấp từ ngoài vào trong rất phức tạp, người ta gọi là callback hell (callback chrismas tree) của Javascript

Cách viết tinh gọn không lồng nhau trong Javascript khi không dùng callback là sử dụng Promise (ES6) hoặc Async/Await (ES7).

So sánh cách viết bằng Callback, Promise và Aync/Await
// Lấy thông tin chi tiết của pokemon đầu tiên trong 12 con trả về.

// jQuery là thư viện sử dụng callback
function getDataCallback() {
  $.get("https://pokeapi.co/api/v2/pokemon?limit=12", function(pokemon) {
    $.get(
      `https://pokeapi.co/api/v2/pokemon/${pokemon.results[0].name}`,
      function(data) {
        console.log(data);
      }
    );
  });
}

// fetch trả về một Promise sau từ khóa 'then',
// 'then' sau nhận đầu vào là kết quả trả về từ 'then' trước đó
function getDataPromise() {
  fetch("https://pokeapi.co/api/v2/pokemon?limit=12")
    .then(promise => promise.json())
    .then(pokemon =>
      fetch(`https://pokeapi.co/api/v2/pokemon/${pokemon.results[0].name}`)
    )
    .then(promise2 => promise2.json())
    .then(data => console.log(data));
}

// await phải nằm trong hàm async
async function getDataAsync() {
  let promise = await fetch("https://pokeapi.co/api/v2/pokemon?limit=12");
  let pokemon = await promise.json();
  let promise2 = await fetch(
    `https://pokeapi.co/api/v2/pokemon/${pokemon.results[0].name}`
  );
  let data = await promise2.json();
  console.log(data);
}

getDataPromise();
getDataCallback();
getDataAsync();

Một số tài liệu về Promise và Async/Await

Javascript cơ bản: class và OOP

Tạo ra các đối tượng thường theo 3 cách sau:

  • Tạo trược tiếp: var obj = {}
  • Thông qua function có đầu vào để tạo ra các prototype
  • Thông qua class có đầu vào để tạo ra các prototype
// Tạo trược tiếp object
var user1 = {name: 'messi', age: 31, email: '[email protected]'}
var user2 = {name: 'ronaldo', age: 32, email: '[email protected]'}
var user3 = {name: 'nani', age: 31, email: '[email protected]'}
// Tạo thông qua function
function User(name, age, emmail){
this.name = name;
  this.age = age;
  this.email = email;
  this.increaseAge = function(){
   this.age += 1; //tăng thêm tuổi  
  }
}

const user1 = new User('messi', 31, '[email protected]')
const user2 = new User('ronaldo', 32, '[email protected]')
const user3 = new User('nani', 31, '[email protected]')
// Tạo thông qua class
class User {
constructor(name, age, email){
  this.name = name;
    this.age = age;
    this.email = email;
  }
  increaseAge(){
   this.age += 1; //tăng thêm tuổi  
  }
}
const user1 = new User('messi', 31, '[email protected]')
const user2 = new User('ronaldo', 32, '[email protected]')
const user3 = new User('nani', 31, '[email protected]')

OOP là gì?

nó là viết tắt của Object Oriented Programming (lập trình hướng đối tượng). OOP là cách để viết chương trình tập trung vào đối tượng (object hay instance), mỗi đối tượng bao gồm thuộc tính (properties hay attributes) và các phương thức hành động (methods).
Một số tài liệu về OOP trong Javascript:

class HumanBeing {
  constructor(hands, legs, eyes) {
    this._hands = hands;
    this._legs = legs;
    this._eyes = eyes;
  }

  walk() {
    console.log(`Loài người Đi bằng ${this._legs} chân`);
  }
}

var human = new HumanBeing(2, 2);
human.walk();

class Male extends HumanBeing {
  constructor(name, hands, legs, eyes) {
    super(hands, legs, eyes);
    this._name = name;
  }

  walk() {
    console.log(`${this._name} đi bằng ${this._legs} chân trên giày thấp.`);
  }
}

class Female extends Male {
  constructor(name, hands, legs, eyes) {
    super(name, hands, legs, eyes);
  }

  walk() {
    console.log(`${this._name} đi bằng ${this._legs} chân trên giày cao gót.`);
    return this;
  }
  makeUp() {
    console.log(`${this._name} trang điểm trên ${this._eyes} mắt.`);
  }
}

var vanAn = new Male("Văn An", 2, 2, 2);
vanAn.walk();

var thiTham = new Female("Thị Thắm", 2, 2, 2);
thiTham.walk().makeUp();

Đáp án bài tập Javascript cơ bản Ajax – Thông tin Pokemon (Pokedex)

Giao diện trang chủ sẽ liệt kê các pokemon (pokemon.html)

thiết kế pokedex, pokemon

Khi vào chi tiết của 1 pokemon (poke.html) ta sẽ thấy mỗi pokemon sẽ nằm trong 1 hay nhiều loại (types), hay các hệ: lửa, nước, bay được, …
Giao diện hiển thị mỗi loại (type.html) sẽ liệt kê các Pokemon giống trang chủ

pokemon.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="pokemon.js"> </script>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
        <div class="container">
          <div class="row">

          </div>
        </div>
</body>
</html>
$(document).ready(function() {
    showData("https://pokeapi.co/api/v2/pokemon/?limit=12");
});

function showData(data) {
    // $(".spinner-border").show();
    $.getJSON(data, function(pokemon) {
        let pika = "";
        // console.log(pokemon);
        pokemon.results.forEach(pikachu => {
            const { name, url } = pikachu;
            let id = url
                .replace("https://pokeapi.co/api/v2/pokemon/", "")
                .replace("/", "");
            console.log(id);

            // pika += `<div class="col-6 col-md-4 col-lg-3">
            // <div>
            //  <a href="poke.html?id=${id}">
            //     <img src="https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/${id}.png" alt="${name}">
            //  </a>
            // </div>
            // </div>`;
            pika += `
            <div class="card card col-6 col-md-4 col-lg-3">
            <a href="poke.html?id=${id}">
            <img class="card-img-top" src="https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/${id}.png" 
            alt="${name}" />
            </a>
            <div class="card-body">
            <div class="text-center">${id}</div>
            <div class="text-center">${name}</div>
                </div>
                </div>
            `;
        });
        $(".row").html(pika);
    }).done(function() {
        console.log("second success");
        $(".spinner-border").hide();
    });
}

poke.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="poke.js"> </script>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <style> 
        body{
            padding: 50px;
        }
    </style>


</head>
</head>
<body>
        <header><a href="pokemon.html">Home</a></header>
        <div>
            <img src="" alt="">
            <h2 id="pokename"></h2>
        </div>
        <table class="table">
                <thead>
                  <tr>
                    <th scope="col">National №</th>
                    <th scope="col" id="no"></th>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <th scope="row">Type</th>
                    <td id="type"></td>
                  </tr>
                  <tr>
                    <th scope="row">Weight</th>
                    <td id="weight"></td>
                  </tr>
                  <tr>
                    <th scope="row">Height</th>
                    <td id="height"></td>
                  </tr>
                  <tr>
                    <th scope="row">Abilities</th>
                    <td id="abl"></td>
                  </tr>
                </tbody>
              </table>
              <h2>Stats</h2>
              <table class="table">
                    <tbody>
                        <tr>
                            <th scope="row">HP</th>
                            <td id="hp"></td>
                        </tr>
                        <tr>
                            <th scope="row">Attack</th>
                            <td id="att"></td>
                        </tr>
                        <tr>
                            <th scope="row">Defense</th>
                            <td id="def"></td>
                        </tr>
                        <tr>
                            <th scope="row">Sp. Atk</th>
                            <td id="spAtk"></td>
                        </tr>
                        <tr>
                            <th scope="row">Sp. Def</th>
                            <td id="spDef"></td>
                        </tr>
                        
                        <tr>
                            <th scope="row">Speed</th>
                            <td id="speed"></td>
                        </tr>
                        <tr>
                          <th scope="row">Total</th>
                          <td id="total"></td>
                        </tr>
                        
                    </tbody>
                </table>

                
                
</body>

</html>
var params = new URLSearchParams(window.location.search);
$(document).ready(function() {
    $.getJSON(
        `https://pokeapi.co/api/v2/pokemon/${params.get("id")}/`,
        function(data) {
            let poki = "";
            const {
                name,
                abilities,
                types,
                stats,
                height,
                weight,
                id,
                moves
            } = data;
            // console.log(types);
            $("#no").html(id.toString().padStart(3, "0"));
            let type = "";
            types.forEach(item => {
                // console.log(item.type.name);
                let classType = getClass(item.type.name);
                console.log(classType);
                type += `<a href="type.html?type=${
                    item.type.name
                }"class="${classType}" >${item.type.name}</a>`;
            });
            let total = 0;
            stats.forEach(item => {
                total += item.base_stat;
            });

            console.log(moves);

            let ablString = "";
            abilities.forEach(item => {
                // console.log(item.abilities.name);
                if (item.is_hidden) {
                    ablString += `<div>${
                        item.ability.name
                    } (hidden ability)</div>`;
                } else {
                    ablString += `<div>${item.ability.name}</div>`;
                }
            });
            $("#speed").html(stats[0].base_stat);
            $("#spDef").html(stats[1].base_stat);
            $("#spAtk").html(stats[2].base_stat);
            $("#def").html(stats[3].base_stat);
            $("#att").html(stats[4].base_stat);
            $("#hp").html(stats[5].base_stat);
            $("#total").html(total);
            $("#abl").html(ablString);
            $("#type").html(type);
            $("img").attr(
                "src",
                `https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/${id}.png`
            );
            $("#pokename").text(name);
            $("body").append(poki);
            $("#weight").html(weight);
            $("#height").html(height);
            console.log(data);
        }
    );
});

function getClass(type) {
    if (type == "grass") {
        return "btn btn-success";
    }
    if (type == "fire") {
        return "btn btn-danger";
    }
    if (type == "flying") {
        return "btn btn-info";
    }
    return "btn btn-light";
}

type.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="type.js"> </script>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
    <header><a href="pokemon.html">Home</a></header>
        <div class="container">
          <div class="row">
          </div>
        </div>
</body>
</html>
var params = new URLSearchParams(window.location.search);
$(document).ready(function() {
    showData(`https://pokeapi.co/api/v2/type/${params.get("type")}/`);
});

function showData(url) {
    // $(".spinner-border").show();
    $.getJSON(url, function(data) {
        let pika = "";
        data.pokemon.forEach(item => {
            const { name, url } = item.pokemon;
            let id = url
                .replace("https://pokeapi.co/api/v2/pokemon/", "")
                .replace("/", "");
            console.log(id);
            pika += `
            <div class="card card col-6 col-md-4 col-lg-3">
            <a href="poke.html?id=${id}">
            <img class="card-img-top" src="https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/${id}.png" 
            alt="${name}" />
            </a>
            <div class="card-body">
            <div class="text-center">${id}</div>
            <div class="text-center">${name}</div>
                </div>
                </div>
            `;
        });
        $(".row").html(pika);
    }).done(function() {
        console.log("second success");
        $(".spinner-border").hide();
    });
}