Aggiornare il contenuto del sito dopo una chiamata AJAX senza ricaricare la pagina
Ho creato questa funzione PHP che elimina un prodotto con un ID passato tramite una chiamata AJAX:
function deleteSelectedProduct()
{
if ( isset($_POST['productToDelete']) && ! empty($_POST['productToDelete']) ) {
$postId=$_POST['productToDelete'];
wp_delete_post($postId);
}
die();
}
La mia chiamata AJAX si presenta così:
$.ajax({
data: sampleData,
type: 'POST',
url: AjaxObject.ss_ajax_url,
success: function(msg) {
window.location.reload(true);
}
});
Come potete vedere, eseguo un ricaricamento della pagina con window.location.reload(true);
per aggiornare una lista di prodotti sulla pagina (dato che un prodotto è stato appena eliminato).
Esiste un modo semplice per aggiornare il contenuto della pagina senza dover ricaricare la pagina?
Una delle soluzioni a cui ho pensato sarebbe quella di modificare lo script PHP in modo che utilizzi l'output buffering:
function deleteSelectedProduct()
{
if ( isset($_POST['productToDelete']) && ! empty($_POST['productToDelete']) ) {
$postId=$_POST['productToDelete'];
wp_delete_post($postId);
}
ob_start();
include 'some_page.php';
$response = ob_clean();
echo $response;
die();
}
Non sono sicuro che questo sia l'approccio corretto. Apprezzerei il vostro consiglio.
Dovresti usare l'ID del prodotto come nome della classe nel tuo HTML e poi potresti fare:
$.ajax({
data: sampleData,
type: 'POST',
url: AjaxObject.ss_ajax_url,
success: function(msg) {
$( '.product-' + sampleData.productToDelete ).remove();
}
});
Se hai dei conteggi nella pagina, dovrai gestire anche quelli. Inoltre, se hai una paginazione che non è generata tramite qualche framework JavaScript, la soluzione migliore è continuare a ricaricare la pagina quando necessario.
