2010-03-08 13 views
17

Me gustaría usar $ .ajax() para solicitar una página, pero solo cargo los fragmentos de esa página. Sé que puedes especificar qué fragmentos de página quieres con .load() pero me preguntaba si esto es posible con $ .ajax.carga de los marcos de página con Jquery AJAX

+0

duplicado posible de [Extracto parte del documento HTML en jQuery] (https://stackoverflow.com/questions/2137811/extract-part-of-html- document-in-jquery) –

Respuesta

2

Puede obtener su fragmento por correo, anexar el html a un div con pantalla: ninguno; Luego use el selector para obtener el fragmento que desea y añádalo a la región que desea visualizar.

Código Aire:

<div id="tempRegion" style="display:none;"> 

</div> 

$.ajax({ 
    url: "page.htm", 
    type: "GET", 
    success: function(results){ 

     $('#tempRegion').html(results); 

     ... 

     // Now select fragment, append to display area 
     var fragement = $('#someFragment').html(); 

     $('#displayRegion').html(fragement); 

    }) 

}); 
32

Para aquellos de ustedes que se preguntan, stoplion se refiere a esta función: Loading Page Fragments (desplácese hacia abajo en la página):

El método .load() , a diferencia de $ .get(), nos permite especificar una parte del documento remoto que se insertará. Esto se logra con una sintaxis especial para el parámetro url. Si se incluyen uno o más caracteres espaciales en la cadena, se supone que la parte de la cadena que sigue al primer espacio es un selector jQuery que determina el contenido que se va a cargar.

Dado que $ .get() no parece ser compatible, supongo que $ .ajax tampoco. Una forma sencilla de implementar esta sería la siguiente:

$.ajax({ 
    url: 'http://example.com/page.html', 
    data: {}, 
    success: function (data) { 
     $("#el").html($(data).find("#selector")); 
    }, 
    dataType: 'html' 
}); 

Esto sería el equivalente de

$("#el").load('http://example.com/page.html #selector'); 

Sin embargo, tenga en cuenta que la sintaxis especial ('#selector') significa que las secuencias de comandos presentes en el cargado HTML no se ejecutará. Consulte Script Execution en los documentos .load().

+0

Gracias. Eso lo hizo. – user288423

+3

+1 - ¡Agradable! Consíguelo todo en una sola declaración. –

+1

No, no son lo mismo. '.ajax()' no funcionará si '# selector' está en el nivel superior. –

-3

La solución fácil con el método de carga:

$("#menu a").click(function(){ 
    event.preventDefault(); 
    $("#container").load(this.href + " #container p"); 
    return false; 
}); 

utilizar sólo el método de Ajax para los guiones más complejos, tales como la publicación o conseguir a partir de un archivo de script PHP o JSON de lo contrario, se ralentizará su sitio web.

+1

OP ya sabe que funciona con '.load()', y claramente tiene la necesidad de hacerlo con '.ajax()', de lo contrario no se lo hubiera preguntado. Su respuesta no aborda la pregunta, y sus enlaces son spam, ya que tampoco son sobre el tema en cuestión. –

1

La respuesta correcta para usted es:

$.ajax({ 
    url: 'http://example.com/page.html', 
    data: {}, 
    success: function (data) { 
    $("#el").html($(data).append(data).find("#selector")); 
    }, 
    dataType: 'html' 
}); 
Cuestiones relacionadas