รีเฟรชส่วนของหน้า (div)


93

ฉันมีไฟล์ html พื้นฐานที่แนบมากับโปรแกรม java โปรแกรม java นี้อัปเดตเนื้อหาส่วนหนึ่งของไฟล์ HTML ทุกครั้งที่รีเฟรชเพจ ฉันต้องการรีเฟรชเฉพาะส่วนนั้นของหน้าหลังจากแต่ละช่วงเวลา ฉันสามารถวางส่วนที่ฉันต้องการรีเฟรชใน a divได้ แต่ฉันไม่แน่ใจว่าจะรีเฟรชเฉพาะเนื้อหาของไฟล์div. ความช่วยเหลือใด ๆ จะได้รับการชื่นชม ขอบคุณ.

คำตอบ:


119

ใช้ Ajax สำหรับสิ่งนี้

สร้างฟังก์ชันที่จะดึงข้อมูลหน้าปัจจุบันผ่าน ajax แต่ไม่ใช่ทั้งหน้าเพียงแค่ div ที่เป็นปัญหาจากเซิร์ฟเวอร์ จากนั้นข้อมูลจะ (อีกครั้งผ่าน jQuery) ใส่ไว้ใน div เดียวกันที่เป็นปัญหาและแทนที่เนื้อหาเก่าด้วยเนื้อหาใหม่

ฟังก์ชันที่เกี่ยวข้อง:

http://api.jquery.com/load/

เช่น

$('#thisdiv').load(document.URL +  ' #thisdiv');

หมายเหตุการโหลดจะแทนที่เนื้อหาโดยอัตโนมัติ อย่าลืมเว้นวรรคก่อนตัวเลือกรหัส


6
เฮ้ผู้ชายเพิ่งค้นพบว่าคุณมีช่องว่างหลังเครื่องหมาย "(โคลอนใช่ไหม) ตัวอย่างนี้ไม่ได้ผล :-) $ ('# thisdiv'). load (document.URL + '# นี่ดิฟ ');
— David Reinberger

16
วิธีนี้มีข้อเสียใหญ่ หากคุณใช้สิ่งนี้และส่วนหนึ่งของเพจโหลดซ้ำคุณจะไม่สามารถทำแอ็คชัน JQuery / Ajax เดียวกันได้อีกโดยไม่ต้องโหลดซ้ำทั้งหน้าในเบราว์เซอร์ หลังจากรีโหลดด้วยวิธีนี้ JQuery จะไม่ได้รับการปรับค่า / จะไม่ทำงานอีก
— Marcel Wasilewski

2
แน่ใจหรือว่าเราต้องการช่องว่างก่อนแท็ก # ฉันทำงานให้ฉันถ้าฉันลบ #tag
— Kurkula

2
@GregHilston นี่คือรหัส js ของฉัน $ ('# dashboard_main_content') โหลด (document.URL + '#dashboard_content'); และนี่คือ HTML <div class = "col-lg-12" id = "dashboard_main_content"> <div id = "dashboard_content"> เนื้อหา </div> </div> ของฉัน
— Touhami

2
$('#thisdiv').load(document.URL + ' #thisdiv>*')ป้องกันไม่ให้มีอีกชิ้น#thisdivในต้นฉบับ#thisdiv
— ปีเตอร์

17

สมมติว่าคุณมี 2 div ภายในไฟล์ html ของคุณ

<div id="div1">some text</div>
<div id="div2">some other text</div>

โปรแกรม java เองไม่สามารถอัปเดตเนื้อหาของไฟล์ html ได้เนื่องจาก html เกี่ยวข้องกับไคลเอนต์ในขณะที่ java เกี่ยวข้องกับส่วนหลัง

อย่างไรก็ตามคุณสามารถสื่อสารระหว่างเซิร์ฟเวอร์ (ส่วนหลัง) และไคลเอนต์ได้

สิ่งที่เรากำลังพูดถึงคือ AJAX ซึ่งคุณทำได้โดยใช้ JavaScript ฉันขอแนะนำให้ใช้ jQuery ซึ่งเป็นไลบรารี JavaScript ทั่วไป

สมมติว่าคุณต้องการรีเฟรชหน้าทุกช่วงเวลาคงที่จากนั้นคุณสามารถใช้ฟังก์ชันช่วงเวลาเพื่อทำซ้ำการกระทำเดียวกันทุกครั้ง x

setInterval(function()
{
    alert("hi");
}, 30000);

คุณสามารถทำได้เช่นนี้:

setTimeout(foo, 30000);

Whereea foo คือฟังก์ชั่น

แทนการแจ้งเตือน ("hi") คุณสามารถดำเนินการตามคำขอ AJAX ซึ่งส่งคำขอไปยังเซิร์ฟเวอร์และรับข้อมูลบางอย่าง (เช่นข้อความใหม่) ซึ่งคุณสามารถใช้เพื่อโหลดลงใน div

AJAX แบบคลาสสิกมีลักษณะดังนี้:

var fetch = true;
var url = 'someurl.java';
$.ajax(
{
    // Post the variable fetch to url.
    type : 'post',
    url : url,
    dataType : 'json', // expected returned data format.
    data : 
    {
        'fetch' : fetch // You might want to indicate what you're requesting.
    },
    success : function(data)
    {
        // This happens AFTER the backend has returned an JSON array (or other object type)
        var res1, res2;

        for(var i = 0; i < data.length; i++)
        {
            // Parse through the JSON array which was returned.
            // A proper error handling should be added here (check if
            // everything went successful or not)

            res1 = data[i].res1;
            res2 = data[i].res2;

            // Do something with the returned data
            $('#div1').html(res1);
        }
    },
    complete : function(data)
    {
        // do something, not critical.
    }
});

ในขณะที่แบ็กเอนด์สามารถรับข้อมูล POST'ed และสามารถส่งคืนวัตถุข้อมูลตัวอย่างเช่น JSON (และเป็นที่ต้องการมาก) มีแบบฝึกหัดมากมายพร้อมวิธีการทำ GSON จาก Google เป็นสิ่งที่ฉัน ใช้ไปสักพักคุณลองดู

ฉันไม่ใช่มืออาชีพกับการรับ Java POST และการส่งคืน JSON ของประเภทนั้นดังนั้นฉันจะไม่ยกตัวอย่างให้คุณ แต่ฉันหวังว่านี่จะเป็นการเริ่มต้นที่ดี


ตัวอย่าง Ajax ของคุณคุณจะอัปเดตสดได้อย่างไร
— TheCrazyProfessor

10

คุณต้องทำเช่นนั้นในฝั่งไคลเอ็นต์เช่น jQuery

สมมติว่าคุณต้องการดึง HTML เป็น div ด้วย ID mydiv:

<h1>My page</h1>
<div id="mydiv">
    <h2>This div is updated</h2>
</div>

คุณสามารถอัปเดตส่วนนี้ของเพจด้วย jQuery ได้ดังนี้:

$.get('/api/mydiv', function(data) {
  $('#mydiv').html(data);
});

ในฝั่งเซิร์ฟเวอร์คุณต้องใช้ตัวจัดการสำหรับคำขอที่มาถึง/api/mydivและส่งคืนส่วนของ HTML ที่อยู่ใน mydiv

ดู Fiddle ที่ฉันสร้างขึ้นสำหรับคุณเพื่อเป็นตัวอย่างสนุก ๆ โดยใช้ jQuery get กับข้อมูลการตอบกลับ JSON: http://jsfiddle.net/t35F9/1/


ตัวอย่างที่ยอดเยี่ยมและทำได้ง่าย เราสามารถหาข้อเสียจากสิ่งนี้ได้หรือไม่?
— Luigi Lopez

3

ใช้fetchและinnerHTMLโหลดเนื้อหา div


1

$.ajax(), $.get(), $.post(), $.load()ฟังก์ชั่นของ jQuery ส่งXML HTTPคำขอภายใน ในบรรดาสิ่งเหล่านี้load()มีไว้เพื่อเฉพาะเจาะจงDOM Elementเท่านั้น ดูjQuery Ajax หมอ รายละเอียดเกี่ยวกับการควบคุมคุณภาพเหล่านี้มีที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.