使用ajax检测阵列


Detect arrays with ajax

我有一个关于PHP的文档,它通过表单检索邮政编码,并返回一个数组。如果邮政编码用于多个citie,它会创建一个多维数组,否则它只将所有内容存储在一个数组中。我有三个场景:

  1. 如果邮政编码不存在,它会给出一个具有2个值"不存在"的数组,并将其输出到表单上
  2. 如果邮政编码存在,它会为您提供一个包含城市和州的数组,并在表单上输出它们
  3. 如果邮政编码存在并且在多个citie上使用,它会将每个结果存储在一个数组中,并将所有结果存储到另一个数组(array=>array[0]=>array([city]=>city1[state]=>state1)array[1]=>array([city]=>city2[state]=>state2)。。。然后输出弹出窗口

我做了所有的事情,但我还是有一些问题。这是我的代码:

编写PHP脚本

include_once('../../../connect.html');
//perform lookup
$title = ($_GET['postal_code']);
$statement = $connection->prepare ("SELECT city, state FROM cities, states WHERE cities.state_id = states.state_id AND cities.postal_code = ?");
$statement->execute(array($title));
$statement->setFetchMode(PDO::FETCH_ASSOC);
$items = array();
while ($r = $statement->fetch()) {
    //$arrayName = array($r = $statement->fetch());
    $items[] = $r;
}
if (count($items) == '1'){
    $newArray = $items[0];
    echo $newArray['city'].",".$newArray['state']; 
}elseif (count($items) == '0'){
        echo "Doesn't exist".","."Doesn't exist";
    }else{
        $varios = array($items);
        print_r($varios);
}

AJAX代码

var ajax = getHTTPObject();
        function getHTTPObject()
        {
            var xmlhttp;
            if (window.XMLHttpRequest) {
              // code for IE7+, Firefox, Chrome, Opera, Safari
              xmlhttp=new XMLHttpRequest();
            } else if (window.ActiveXObject) {
              // code for IE6, IE5
              xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            } else {
              //alert("Your browser does not support XMLHTTP!");
            }
            return xmlhttp;
        }
        function updateCityState()
        {
            if (ajax)
            {
                var zipValue = document.getElementById("postal_code").value;
                if(zipValue)
                {
                    var url = "get_cities.php";
                    var param = "?postal_code=" + escape(zipValue);
                    ajax.open("GET", url + param, true);
                    ajax.onreadystatechange = handleAjax;
                    ajax.send(null);
                }
            }
        }
        function handleAjax()
        {
            if (ajax.readyState == 4)
            {
                if( ajax.responseText.length ) {
                    if (ajax.responseText[2]) {
                        centerPopup();
                        loadPopup();
                    }
                    citystatearr = ajax.responseText.split(",");
                    city.value = citystatearr[0];
                    state.value = citystatearr[1];
                }else{
                }
            }
        }

问题是:

  1. 它每次都调用函数centerPopup和loadPopup,而不管结果如何(只有当PHP脚本返回多维数组时才应该调用它)
  2. 当脚本发送普通数组或多维数组时,我不知道如何通过AJAX进行检测

基本上就是这两个问题,但解决一个,另一个就解决了。

感谢您的帮助!!

ajax.responseText是一个字符串,在JavaScript字符串[n]中返回字符串的第n个字母。

您必须用PHP对数据进行编码,然后用JavaScript进行解码,最好的方法是使用JSON。PHP和JavaScript都支持JSON(JSON_encode/JSON_decode和JSON.stringfy/JSON.parse),所以更容易!

这是JS中的代码:

var ajax = getHTTPObject();
        function getHTTPObject()
        {
            var xmlhttp;
            if (window.XMLHttpRequest) {
              // code for IE7+, Firefox, Chrome, Opera, Safari
              xmlhttp=new XMLHttpRequest();
            } else if (window.ActiveXObject) {
              // code for IE6, IE5
              xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            } else {
              //alert("Your browser does not support XMLHTTP!");
            }
            return xmlhttp;
        }
        function updateCityState()
        {
            if (ajax)
            {
                var zipValue = document.getElementById("postal_code").value;
                if(zipValue)
                {
                    var url = "get_cities.php";
                    var param = "?postal_code=" + escape(zipValue);
                    ajax.open("GET", url + param, true);
                    ajax.onreadystatechange = handleAjax;
                    ajax.send(null);
                }
            }
        }
        function handleAjax()
        {
            if (ajax.readyState == 4)
            {
                if( ajax.responseText.length ) {
                    try {
                        var data = JSON.parse(ajax.responseText); // = $items
                    }
                    catch(e) {
                        //json parse error
                    } 
                    if (data[2]) {
                        centerPopup();
                        loadPopup();
                    }
                    citystatearr = ajax.responseText.split(",");
                    // ^^^^^^ I think you'll need to change this
                    city.value = citystatearr[0];
                    state.value = citystatearr[1];
                }else{
                }
            }
        }

和PHP:

include_once('../../../connect.html');
//perform lookup
$title = ($_GET['postal_code']);
$statement = $connection->prepare ("SELECT city, state FROM cities, states WHERE cities.state_id = states.state_id AND cities.postal_code = ?");
$statement->execute(array($title));
$statement->setFetchMode(PDO::FETCH_ASSOC);
$items = array();
while ($r = $statement->fetch()) {
    //$arrayName = array($r = $statement->fetch());
    $items[] = $r;
}
if (count($items) == '1'){
    $newArray = $items[0];
    echo $newArray['city'].",".$newArray['state']; 
}elseif (count($items) == '0'){
        echo "Doesn't exist".","."Doesn't exist";
    }else{
        $varios = array($items);
        die(json_encode($varios));
}