Ajax-запрос с Javascript - PullRequest
       2

Ajax-запрос с Javascript

0 голосов
/ 25 января 2011

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

Проблема в том, что в правильной таблице используется некоторый 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 или способов решения этой проблемы. Надеюсь, кто-то может мне помочь и дать мне хорошее решение! И скажите мне, почему приведенный выше код не работает должным образом?

Заранее спасибо!

Милаан

Ответы [ 4 ]

2 голосов
/ 25 января 2011

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 голосов
/ 25 января 2011

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

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

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

И somepage.php может быть примерно таким:

<?php
   // get table content
   echo "<table>...</table>";
?>
0 голосов
/ 25 января 2011

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

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

Лучшей идеей, вероятно, будет использование тонкой структуры JavaScript, lie jquery, которая помогает вам с браузеромсовместимость.

0 голосов
/ 25 января 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...