2011-01-25 2 views
0

У меня есть страница, на которой я хочу показать пару таблиц MySQL.
Существует одна таблица справа, которая может меняться только при выборе другого человека.
Второй стол - это главный стол в центре. У меня есть раскрывающийся список с каждым человеком. Результаты от выбранного человека показаны в средней таблице. Для каждого человека есть несколько результатов, поэтому есть второй раскрывающийся список, чтобы выбрать, какой из этих результатов вы хотите показать. Все это делается с помощью запроса Ajax XMLHTTP.Ajax-запрос с Javascript

Проблема в том, что в правой таблице используется некоторый javascript. Я знаю, что это невозможно с Ajax в сочетании с XMLHTTP-запросом. Но без javascript я не могу сделать то, что хочу. Есть ли способ показать правильную таблицу после завершения работы javascript?

Я теперь использую рамки. Это не очень приятно. Потому что мне нужно стилизовать обе страницы, чтобы выглядеть хорошо вместе, и это не так просто, как сказано. Но так оно и делается, как я хочу.

Так что я искал в интернете (долгое время) и всего за несколько минут, прежде чем я хотел отказаться, я нашел этот кусок кода (приходя от http://www.javascriptkit.com/dhtmltutors/ajaxincludes.shtml):

function HttpRequest(url){ 
var pageRequest = false //variable to hold ajax object 
    /*@cc_on 
     @if (@_jscript_version >= 5) 
     try { 
     pageRequest = new ActiveXObject("Msxml2.XMLHTTP") 
     } 
     catch (e){ 
      try { 
      pageRequest = new ActiveXObject("Microsoft.XMLHTTP") 
      } 
      catch (e2){ 
      pageRequest = false 
      } 
     } 
     @end 
    @*/ 

    if (!pageRequest && typeof XMLHttpRequest != 'undefined') 
     pageRequest = new XMLHttpRequest() 

    if (pageRequest){ //if pageRequest is not false 
     pageRequest.open('GET', url, false) //get page synchronously 
     pageRequest.send(null) 
     embedpage(pageRequest) 
    } 
} 

function embedpage(request){ 
    //if viewing page offline or the document was successfully retrieved online (status code=2000) 
    if (window.location.href.indexOf("http")==-1 || request.status==200) 
     document.write(request.responseText) 
    } 
} 

HttpRequest("external.htm") //include "external.htm" onto current page 

Этот код работает отлично .. . Первый раз. Как только вы меняете человека, вся страница исчезает, и появляется только таблица, и firefox сохраняет «загрузку» страницы (вы видите, что круг крутится). Я знаю, как редактировать код выше, чтобы соответствовать моим потребностям, но я не понимаю Ajax или как исправить эту проблему. Надеюсь, кто-то может мне помочь и дать мне хорошее решение! И скажите, почему приведенный выше код работает неправильно?

Заранее благодарен!

Milaan

ответ

0

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

И есть ли причина, по которой вы не можете использовать библиотеку, например jQuery? Это не волшебная пуля, но это облегчит вашу жизнь и аякс.

+0

Ну, это был пример, который я использовал из Интернета, я думал, что моя версия, которая включает некоторые переменные, не имела никакого значения. Я знаю jQuery, но это лучше? Это проще? Я знаю некоторые основы, поэтому мне нужно было бы все узнать (включая Ajax?). – Milaan

+0

@Milaan, я думаю, что было бы неплохо избавиться от фреймов (с jQuery или без него), и вы могли бы использовать самый простой запрос ajax, чтобы вывести вывод своих php-скриптов прямо там, где вы хотите, используя '.load() ': http://api.jquery.com/load/ – jeroen

+0

Спасибо, jeroen! Это действительно лучший способ, чем мои кадры (я никогда не использую их самостоятельно, но это единственное решение). Должен ли я сделать средний стол также с помощью jQuery? Возможно, было бы лучше, если бы я сделал, правильно? – Milaan

2

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

https://developer.mozilla.org/en/document.write

Что вы можете сделать вместо этого:

if (window.location.href.indexOf("http")==-1 || request.status==200) { 
    var elm = document.createElement('div'); 
    elm.innerHTML = request.responseText; 
    document.getElementsByTagName('body')[0].appendChild(elm); 
} 
+0

Wat я должен изменить его в то? Я пробовал: document.getElementById('maintable').innerHTML = response Text; Но это тоже не сработало ... Или я допустил ошибку? – Milaan

0

Вы можете использовать функции DOM, чтобы добавить содержимое, загруженное в существующий документ, как:

document.getElementById('mypanel').innerHTML = '<html code goes here>'; 

Лучшая идея, вероятно, будет использовать тонкий Javascript рамочное ложь JQuery, которая поможет вам с совместимостью браузеров ,

+0

Джероун сказал то же самое. Поэтому для меня лучше всего увидеть, как jQuery работает с AJAX-запросами. Итак, я разрешил jQuery запускать запрос Ajax, который возвращает таблицы, а затем позволяет jQuery запускать Javascript поверх возвращенной таблицы? – Milaan

0

jQuery должен облегчить вам задачу. Ваш код должен выглядеть примерно так.

$.post("somepage.php", function(data){ 
    $("#divID").html(data); 
}); 

<div id="divID"></div> 

И somepage.php может быть что-то вроде этого:

<?php 
    // get table content 
    echo "<table>...</table>"; 
?> 
+0

Спасибо вам за ответ! Это действительно намного лучше. Я уже знал jQuery, но не мог все это сделать. Это действительно очень удобно. Благодаря! – Milaan

Смежные вопросы