что именно делает эта функция javascript?и как мне поймать значения из выбора, чтобы вставить его обратно в базу данных? - PullRequest
0 голосов
/ 20 января 2011

Я искал ajax-скрипт, который мог бы заполнить тройной выпадающий список с помощью PHP.И я наткнулся на этот кусок кода, хотя код работает довольно хорошо, я хотел бы знать, что на самом деле происходит за кулисами, так как я новичок в AJAX или JavaScript, я не могу понять, что именно делает функция ниже.Вот код:

<script language="javascript" type="text/javascript">

function getXMLHTTP() { //function to return the xml http object
        var xmlhttp=false;  
        try{
            xmlhttp=new XMLHttpRequest();
        }
        catch(e)    {       
            try{            
                xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e){
                try{
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch(e1){
                    xmlhttp=false;
                }
            }
        }

        return xmlhttp;
    }

    function getState(countryId) {      

        var strURL="findState.php?country="+countryId;
        var req = getXMLHTTP();

        if (req) {

            req.onreadystatechange = function() {
                if (req.readyState == 4) {
                    // only if "OK"
                    if (req.status == 200) {                        
                        document.getElementById('statediv').innerHTML=req.responseText;                     
                    } else {
                        alert("There was a problem while using XMLHTTP:\n" + req.statusText);
                    }
                }               
            }           
            req.open("GET", strURL, true);
            req.send(null);
        }       
    }
    function getCity(stateId) {     
        var strURL="findCity.php?state="+stateId;
        var req = getXMLHTTP();

        if (req) {

            req.onreadystatechange = function() {
                if (req.readyState == 4) {
                    // only if "OK"
                    if (req.status == 200) {                        
                        document.getElementById('citydiv').innerHTML=req.responseText;                      
                    } else {
                        alert("There was a problem while using XMLHTTP:\n" + req.statusText);
                    }
                }               
            }           
            req.open("GET", strURL, true);
            req.send(null);
        }

    }
</script>

, а вот код из finsState.php

<?php
$countryId=intval($_GET['country']);
$host = "localhost";
$username = "username";
$password = "password";
$database = "test";
$connection = mysql_connect($host,$username,$password) or die(mysql_error());
$database = mysql_select_db($database) or die(mysql_error());
$query = "SELECT * FROM states WHERE country_id = ".$countryId;
$result = mysql_query($query) or die(mysql_error());
?>
<select name="states" onchange="getCity(this.value)">
<option>Select State</option>
<?php while($row = mysql_fetch_array($result)) { ?>
    <option value="<?php echo $row['id']; ?>"><?php echo $row['name']; ?></option>
<?php } ?>
</select>

, а это findCity.php

<?php
$stateId=intval($_GET['state']);
$host = "localhost";
$username = "username";
$password = "password";
$database = "test";
$connection = mysql_connect($host,$username,$password) or die(mysql_error());
$database = mysql_select_db($database) or die(mysql_error());
$query = "SELECT * FROM cities WHERE state_id = ".$stateId;
$result = mysql_query($query) or die(mysql_error());
?>
<select name="city">
<option>Select City</option>
<?php while($row = mysql_fetch_array($result)) { ?>
    <option value="<?php echo $row['id']; ?>"><?php echo $row['name']; ?> </option>
<?php } ?>
</select>

Мои вопросы:

а) Может кто-нибудь, пожалуйста, суммируйте первую, вторую и третью функции javascript и как она выбирает все значения из findState.php и findCity.php

b) Если бы я должен был пойматьЗначения StateId и CityId пользователь выбрал, как мне это сделать.так как список заполнен из JavaScript, я не могу поймать значение из PHP ($ _POST ['state']).

1 Ответ

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

Первая функция пытается открыть и запросить HTTP HTTP, позволяя сценариям на стороне клиента взаимодействовать со сценариями размера сервера. Поскольку различные браузеры обрабатывают это по-разному, try необходимо использовать стандартный метод, прежде чем пытаться реализовать современную реализацию IE, более старую реализацию IE и, наконец, сдаться.

Вторые два делают примерно одно и то же. Они определяют сценарий, с которым они хотят взаимодействовать, и используют первую функцию для подключения. Если соединение было успешным, оно отправляет информацию с помощью HTTP-запроса GET (традиционно GET используется для получения информации, POST используется для ее установки). Когда информация отправляется с использованием XmlHttpRequest, событие onreadystatechange срабатывает в ключевых точках во время соединения и дает доступ к readyState (в зависимости от этапа запроса) и status, который является стандартным ответом сервера (вы Вы, вероятно, знакомы с "404", что означает "файл не найден"). Статус «200» означает «все в порядке», поэтому, когда он получен, сценарий знает, что он может воздействовать на информацию, которую ему дали. Любой другой ответ создаст всплывающее окно, которое сообщит пользователю, что пошло не так.

Не видя реальной страницы, с которой взаимодействует этот скрипт, я не знаю лучшего способа получить stateId и CityId. В предположении, они будут значением входа при нажатии определенной кнопки. Если это так, то что-то вроде следующего фрагмента кода сделает это:

document.getElementById('id-of-submit-button').onclick = function() {
    var stateId = document.getElementById('id-of-stateid-input').value,
        CityId  = document.getElementById('id of cityid-input').value;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...