2014-12-17 4 views
2

Я много исследовал в других вопросах и в Google, и до сих пор ничего не сработало. У меня есть опыт работы с JavaScript/jQuery, и я считаю, что я свободно говорю на PHP.Как использовать javascript из содержимого, загруженного AJAX?

Я разрабатываю приложение для работы, которое использует jQuery для загрузки страниц из меню навигации. Вот настройки этого элемента до сих пор:

<menu> 
    <button value="home">HOME</button> 
    <button value="process_sheets">PROCESS SHEETS</button> 
    <button value="admin">ADMINISTRATION</button> 
    <button value="faq">FAQ</button> 
    <div id="search-container"></div> 
</menu> 

<script> 

$("menu button").each(function() { 
    $(this).on("click", function() { 
     $.get(null, { 
      page: $(this).val() 
     }, function(data) { 
      $("article#content").html($.parseHTML(data)); 
     }, 'html'); 
    }); 
}); 

</script> 

Проблема заключается в том, что у меня есть простой аккордеон на одной странице, которая имеет код, который не работает при загрузке через меню.

Вот код аккордеон:

$(function($) { 
    $('#accordion').find('.accordion-toggle').on('click', function(){ 
     $(this).next().slideToggle('fast'); 
     $(".accordion-content").not($(this).next()).slideUp('fast'); 
    }); 
}); 

<h2>Process Sheets</h2> 
<div id="process-sheets-accordion"> 
    <h4 class="accordion-toggle">GE</h4> 
    <div class="accordion-content"> 
<?php include 'static_section_form.php'; ?> 
    </div> 
    <h4 class="accordion-toggle">5"</h4> 
    <div class="accordion-content"> 
    <p>Vivamus facilisisnibh scelerisque laoreet.</p> 
    </div> 
    etc... 
</div> 
+0

Похоже вы загружаете JQuery на той же странице, он должен быть загружен после 'конкретных page' нагрузок –

+0

Там нет цели html ($. parseHTML (data)); ' –

+0

@Justcode не повезло :( –

ответ

3

Если код в вопросе на самом деле в тексте возвращенного АЯКС вызова, проблема заключается в том, что не получает выполняется при загрузке через get, а затем проанализируйте его и добавьте его на страницу.

JQuery имеет функцию, специально разработанные для делать именно это, хотя: load:

$("menu button").each(function() { 
    $(this).on("click", function() { 
     $("article#content").load(null, {page: $(this).val()}); 
    }); 
}); 

load будет извлекать страницы с помощью Ajax, извлечь сценарии из него, положить содержимое в элемент, а затем выполнить скрипты.

выше будет использовать POST, потому что мы передаем объект в качестве второго аргумента, но, как вы используете GET, мы должны просто добавить page к URL-адресу:

$("article#content").load(location.pathname + "?page=" + encodeURIComponent($(this).val())); 

... или передавая его в виде строки:

$("article#content").load(location.pathname, "page=" + encodeURIComponent($(this).val())); 

Если вы не предоставите объект данных, load по умолчанию для GET вместо POST.


Примечание стороны: Я никогда не видел null как URL для $.get ранее. Я скопировал его на вызов load, но я не думаю, что null действителен (в любом месте), так как в документации нет ничего, что могло бы быть чем угодно, кроме строки. Используйте фактический URL-адрес, например location.pathname, который я использовал в примере GET выше.

+0

Теперь страницы не загружаются. Значение null вызывает значение .get по умолчанию для текущего URL-адреса. Мне нужна эта функциональность, если это возможно. –

+0

@CoreyRay: Это не документированное поведение, и поэтому может сломаться в точечном rev (например, он может работать в версии 1.1.1, но с ошибкой в ​​v1.11.2). И действительно, вполне возможно, что он работает с '$ .get', но не с' load'. В любом случае это неверно, поэтому требуется фиксация. Используйте настоящий URL-адрес, и 'load' должен работать. –

+0

ОК, позвольте мне зайти на php-вызов, чтобы получить запрошенный url, и я дам вам знать. Благодарю. –

0

Вот рабочий фрагмент кода, который делает именно так, как я предполагал:

$("menu button").each(function() { 
    $(this).on("click", function() { 
     $("#content").load(window.location.pathname + "?page=" + encodeURIComponent($(this).val())); 
    }); 
}); 
Смежные вопросы