Jake Paul vs Anthony Joshua LIVE: Stream info, results, updates and more from Netflix super-fight

Jake Paul and Anthony Joshua’s outlandish end of 12 months mismatch is definitely happening tonight in Miami.

The heavyweight clash headlines an evening of motion on Netflix that features legendary MMA fighters, Olympians and a historic women’s title fight. All of it takes place on the Kaseya Center, with motion starting at 4.45pm local time.

What’s your final Jake Paul vs Anthony Joshua prediction?

The professionals have had their say on 2025’s most controversial fight. Now it is time so that you can tell us how it can play out.

👇
Join the talk; share your insight. Use the comment button on the underside left to have your say

Former UFC champions Tyron Woodley and Anderson Silva will clash in a showcase bout on the fundamental card. But the massive headline is a co-main event between Alyicia Baumgardner and Leila Beaudoin that may be for undisputed if the WBC hadn’t refused to sanction a bout under men’s rules.

Then the fundamental event arrives as Jake Paul finally silences every considered one of his doubters by facing the two-time heavyweight champion Anthony Joshua. He was outweighed by almost 30lb at weigh-ins yesterday, and is at the very least five inches shorter than his rival.

After years of being told he only fights much older opponents who’re half his size, Paul now takes on arguably considered one of the hardest challenges in boxing pound-for-pound. And despite the bout being a monstrous mismatch, he seems confident in his abilities.

We may have live updates throughout the night from this massive fight right here on the Bloody Elbow live blog. Ensure that to enroll to Talking Points above and stay in contact throughout the night together with your opinions and predictions.

Donagh Corby

Welcome to the Bloody Elbow live blog

My name is Donagh Corby and I shall be keeping you updated throughout the night right here on Bloody Elbow. You possibly can get in contact with us via Talking Points, which you’ll be able to see above. Ensure that to comment and interact, I’ll be right there with you throughout the night.

As for the motion within the ring, we’re in for an interesting night of motion as Jake Paul finally makes the step as much as not only the world level however the true heavyweight division to tackle the two-time champion Anthony Joshua!

[Link]

const postId = 280814;
let modifiedDate = “2025-12-19T19:48:09+00:00”;

// creates a timestamp cachebuster rounded to nearest 30 seconds threshold
function getLiveBlogCacheBusterTimestamp() {
const now = latest Date();

// Get current UTC time components
const minutes = now.getUTCMinutes();
const seconds = now.getUTCSeconds();

// Round as much as the closest 30 seconds
const roundedSeconds = Math.ceil(seconds / 30) * 30;

// Adjust minutes and seconds
let roundedDate = latest Date(Date.UTC(
now.getUTCFullYear(),
now.getUTCMonth(),
now.getUTCDate(),
now.getUTCHours(),
minutes,
roundedSeconds
));

// Convert to Unix timestamp
return Math.floor(roundedDate.getTime() / 1000);
}

function getPollingEndpointUrl(postId) {
const baseUrl = “/wp-json/grv-live-blog/v1/post-modified-date”;
const cacheBuster = getLiveBlogCacheBusterTimestamp();
return `${baseUrl}?post_id=${postId}&t=${encodeURIComponent(cacheBuster)}`;
}

function getUpdatedEventEndpointUrl(postId) {
const baseUrl = “/wp-json/grv-live-blog/v1/get-updated-events”;
const cacheBuster = getLiveBlogCacheBusterTimestamp();
return `${baseUrl}?post_id=${postId}&t=${encodeURIComponent(cacheBuster)}`;
}

function showRefreshButton() {
const refresh_btn = document.getElementById(“glb-btn”);
refresh_btn.style.display = “block”;
}

function hideRefreshButton() {
const refresh_btn = document.getElementById(“glb-btn”);
refresh_btn.style.display = “none”;
}

function jumpToLatestEvent() {

hideRefreshButton();

const element = document.querySelector(“.wp-block-grvmedia-grv-live-blog”);

// Scroll to the element
if (element) {
element.scrollIntoView({ behavior: “smooth”, block: “start” });
}
}

function createPointItem(item) {

// Create the

  • element
    const li = document.createElement(“li”);

    li.appendChild(document.createTextNode(item.headline));

    const a = document.createElement(“a”);
    a.href = `#${item.anchorId}`; // Set the href attribute
    a.innerHTML = `View post

    `; // Set the text content

    li.appendChild(a);

    return li;
    }

    function addScriptSrcToHead(src) {
    let s = document.createElement(“script”);
    // expectation is that that is the primary script element in the pinnacle
    let insertion = document.getElementsByTagName(“script”)[0];
    s.async = true;
    s.src = src;
    insertion.parentNode.insertBefore(s, insertion);
    }

    function refreshScripts( fragment ) {
    let scripts = fragment.querySelectorAll(“script”);
    for ( let script of scripts ) {
    let freshScript = document.createElement(“script”);
    // copy attributes
    let attrs = script.attributes;
    for ( let attr of attrs ) {
    freshScript.setAttribute( attr.name, attr.value );
    }
    // copy inner script code. #718, #782
    freshScript.innerHTML = script.innerHTML;
    script.parentNode.replaceChild( freshScript, script );
    }
    }

    function reverseEvents(updated_events){

    const events = Object.entries(updated_events);

    // Reverse the order of the entries
    events.reverse();

    // Convert the reversed entries back to an object
    return Object.fromEntries(events);
    }

    function fetchUpdatedEvents() {

    const apiUrl = getUpdatedEventEndpointUrl(postId);

    fetch(apiUrl)
    .then(response => response.json())
    .then(updatedEvents => {

    // Find the events container
    let key_points = document.querySelector(“.grv-live-blog-key-points”);

    // if we had no key points to begin with but have some now we’d like to create the div and ul
    // for it to populate
    if(updatedEvents.key_points.length > 0) {

    if (!key_points) {
    // Element doesn’t exist, create it
    key_points = document.createElement(“div”);
    key_points.className = “grv-live-blog-key-points”;

    // Create and append

    to the brand new element
    const heading = document.createElement(“h5”);
    heading.textContent = “Key points”;
    key_points.appendChild(heading);

    // Create and append

      to the brand new element
      const ul = document.createElement(“ul”);
      ul.className = “grv-live-blog-key-points-list”;
      key_points.appendChild(ul);

      const glb_wrapper = document.getElementById(“glb-wrapper”);

      if (glb_wrapper) {
      // Insert the brand new element before the wrapper
      glb_wrapper.parentNode.insertBefore(key_points, glb_wrapper);
      }
      }

      const key_points_list = document.querySelector(“.grv-live-blog-key-points-list”);
      key_points_list.innerHTML = “”;

      // Update the important thing points
      updatedEvents.key_points.forEach(point => {

      const point_item = createPointItem(point);
      key_points_list.appendChild(point_item);

      });

      // else we have now no key points so lets remove the list
      }else{

      if (key_points) {
      key_points.remove();
      }
      }

      // now cope with the events themselves…
      const events_container = document.querySelector(“.wp-block-grvmedia-grv-live-blog”);

      // get a map of the present events keyed by id
      const existingEvents = Array.from(events_container.querySelectorAll(“.wp-block-grvmedia-grv-live-blog-event”))
      .reduce((map, event) => {
      map[event.id] = event;
      return map;
      }, {});

      // get the present and updated keys so we will compare
      const existingKeys = Object.keys(existingEvents);
      const updatedKeys = Object.keys(updatedEvents.updated_blocks);

      // find events which can be in existing but not in updated
      const keysToRemove = existingKeys.filter(key => !updatedKeys.includes(key));

      // remove any events which have been deleted
      keysToRemove.forEach(key => {
      // Find the element with the corresponding id
      const element = document.getElementById(key);

      // Remove the element if it exists
      if (element) {
      element.remove();
      }
      });

      // reverse the events in order that they are in the correct order if we add multiple…
      updatedEvents.updated_blocks = reverseEvents(updatedEvents.updated_blocks);

      // loop through each updated event
      Object.values(updatedEvents.updated_blocks).forEach(updatedEvent => {

      // create temp elem so we will hydrate it from our rendered event after which access the id etc
      const parser = latest DOMParser();
      const tempEvent = parser.parseFromString(updatedEvent,”text/html”);

      // Select the event from our temp container
      const eventElement = tempEvent.querySelector(“.wp-block-grvmedia-grv-live-blog-event”);

      // Extract the id
      const eventId = eventElement ? eventElement.id : null;

      // Using a fraction allows us to refresh scripts before attaching to dom
      let frag = document.createDocumentFragment();

      if (existingEvents[eventId]) {
      frag.append( …eventElement.childNodes );
      } else {
      frag.append( eventElement );
      }
      refreshScripts( frag );

      // if its an existing event replace the content of the event so we dont cause a jump
      if (existingEvents[eventId]) {

      // get the present event
      const event = document.getElementById(eventId);
      event.style.minHeight = event.offsetHeight + “px”;

      // update its innerHTML and sophistication incase we have now modified to featured or breaking etc
      event.className = eventElement.className;
      event.replaceChildren(…frag.childNodes);

      const seeMore = event.querySelector(“.see-more-wrapper.lazy”);
      let seeMoreSrc = seeMore?.getAttribute(“data-src”);
      if (seeMoreSrc) {
      if ( seeMoreSrc.indexOf(‘instagram’) != -1 && window.instgrm ) {
      window.instgrm.Embeds?.process();
      } else {
      addScriptSrcToHead(seeMoreSrc);
      }
      }

      // if its a brand new event add to the highest – TODO: sort order if multiple latest events
      } else {
      // Create a brand new event
      events_container.insertBefore(frag, events_container.firstChild);
      }
      });
      })
      .catch(error => {
      console.error(“Error fetching updated blocks:”, error);
      });
      }

      document.addEventListener(“DOMContentLoaded”, function() {

      function startPolling(postId) {

      function fetchPostModifiedDate() {
      const url = getPollingEndpointUrl(postId);
      fetch(url)
      .then(response => response.json())
      .then(data => {

      // if our post modified date has modified we have now an update
      if(modifiedDate != data.modified_date) {

      // update the modified time to be the brand new modified time
      modifiedDate = data.modified_date;

      // show the button so a user can refresh
      fetchUpdatedEvents();
      showRefreshButton();
      }
      })
      .catch(error => {
      console.error(“Error fetching post modified date:”, error);
      });
      }

      // Set interval to fetch every 30 seconds
      setInterval(fetchPostModifiedDate, 30000); // 30 seconds
      }

      // Start polling
      startPolling(postId);

      const refreshButton = document.getElementById(“glb-btn”);

      refreshButton.addEventListener(“click”, jumpToLatestEvent);
      });

  • Related Post

    Leave a Reply