Проблема обновления выберите тег с ajax на IE - PullRequest
1 голос
/ 04 августа 2011

У меня проблема с внутренней функцией HTML при обновлении параметров тега.В первом теге select я выбираю страну, а код ajax должен обновить города в другом теге select.Мой код работает во всех основных браузерах, кроме IE.Вот код js для вызова php-скрипта:

>function show_zones(str)
>{
>if (window.XMLHttpRequest)
>  {// code for IE7+, Firefox, Chrome, Opera, Safari
>  xmlhttp=new XMLHttpRequest();
>  }
>else
>  {// code for IE6, IE5
>  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
>  }
>xmlhttp.onreadystatechange=function()
>  {
>  if (xmlhttp.readyState==4 && xmlhttp.status==200)
>    {
>    document.getElementById('region_to').innerHTML="";
>   jQuery.noConflict();
>   (function($) {
>   $('#region_to').append(xmlhttp.responseText);
>   })(jQuery);
>   alert(xmlhttp.responseText);
>   }
>  }
>xmlhttp.open("GET","ajax/zones.php?country="+str,true);
>xmlhttp.send();
>}

Во всех браузерах с предупреждением код возвращает соответствующие теги опций, но в IE он возвращает «Undifined».Я использую Jquery для добавления xmlhttp.responseText, потому что IE не поддерживает innerhtml для выбранных тегов.Функция noConflict используется, чтобы избежать конфликта между mootolls и библиотеками jquery.Я не могу просто поместить тег select в div и распечатать его вместо печати только параметров, потому что я использую пользовательский выбор, который создается кодом js, когда происходит событие window.onload.код:

>require_once("../../connect.php");
>$country_query="SELECT* FROM `tour_countries` WHERE  >country_name='".$_GET['country']."'";
>$country_result=mysql_query($country_query);
>$country_row=mysql_fetch_array($country_result);
>$zone_query="SELECT* FROM `tour_zones` WHERE country_ID='".$country_row[0]."'";
>$zone_result=mysql_query($zone_query);
>while($zone_row=mysql_fetch_array($zone_result))
>{
>   echo '<option value="'.$zone_row[1].'">'.$zone_row[1].'</option>';
>}

Спасибо за ответы и извините за мой бедный английский.

1 Ответ

1 голос
/ 04 августа 2011

У меня была та же проблема с IE и .innerHtml () с вызовами ajax.Я решил это, сделав AJAX запрос POST и используя jQuery .html () вместо .innerHTML (), по какой-то причине IE довольно затруднен с innerHtml ().Вот рабочая функция, которую я использовал:

function getCitiesFromState(state, select, spinnerNum)
{
    if (window.XMLHttpRequest)
    {
        xmlhttp = new XMLHttpRequest();
    }
    else
    {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    var ran = Math.round((new Date()).getTime() / 1000),
    terms = "state="+state+'&r='+ran;

    xmlhttp.open("POST","ajax5.php",true);
    xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

    /***********************************************************
    * These two lines cause Chrome to throw non-fatal errors.
    * Removing them didn't change the functionality of the
    * request, but this may end up needing a conditional.
    ***********************************************************/
    //xmlhttp.setRequestHeader('Content-length', terms.length);
    //xmlhttp.setRequestHeader('Connection', 'close');

    xmlhttp.onreadystatechange = function()
    {
        $('#spinner'+spinnerNum).fadeIn(300);

        if (xmlhttp.readyState  == 4 
         && xmlhttp.status      == 200)
        {
            $('#spinner'+spinnerNum).fadeOut(100);
            $('#'+select).html(xmlhttp.responseText);
        }
    }

    xmlhttp.send(terms);
}

И файл ajax5.php:

<?php
    include 'db.class2.php';
    $DB = new DB_MySql2;
    $DB->connect();

    $state = mysql_real_escape_string($_POST['state']);

    $q = $DB->query("SELECT DISTINCT `city`, `zip_code`
                     FROM `usa_master` 
                     WHERE `state` = '".$state."' 
                     GROUP BY `city`
                     ORDER BY `population` DESC LIMIT 0, 150");

    while($r = $DB->fetch_assoc($q)) {
        $city[] = $r['city'];
        $zips[] = $r['zip_code'];
    }

    array_multisort($city, $zips);

    echo '<option value="" selected="selected">Select City</option>';
    $size = sizeof($city);

    for ($x = 0; $x < $size; $x++)
    {
        if (strlen($zips[$x]) == 4)
        {
            $zips[$x] = '0' . $zips[$x];
        }

        echo '<option class="city_list" value="'.$zips[$x].'">'.$city[$x].'</option>';
    }
?>

Надеюсь, это поможет.

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