2014-10-10 3 views
0

У меня есть документ о PHP, который возвращает почтовые коды через форму и возвращает массив. Если почтовый код используется более чем на одном элементе, он создает многомерный массив, иначе он хранит все только в одном. У меня есть три сценария:Обнаружение массивов с помощью ajax

  1. Если почтовый индекс не существует, она дает массив с 2 значениями «не существует» и вывод его на форме.
  2. Если почтовый индекс существует, он дает вам массив с городом и состоянием и выводит их на форму.
  3. Если почтовый индекс существует и используется более чем в одном элементе, он сохраняет каждый результат в массиве, а все они - в другой массив (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, когда скрипт отправляет обычный массив или многомерный массив.

Это в основном эти две проблемы, но решение одного, другое решение.

Любая помощь приветствуется!

+0

Проверьте, если первый элемент (ответ [0]) является массивом или нет. Если это массив, то вы знаете, что ответ представляет собой многомерный массив. – aarosil

+0

@aarosil Это не работает, я уже пробовал. –

ответ

0

ajax.responseText является строкой, в строку JavaScript [п] вернуть п ю букву строки.

Вы должны закодировать свои данные в PHP, а затем декодировать его в JavaScript, лучший способ сделать это с помощью JSON. PHP и JavaScript поддерживают JSON (json_encode/json_decode и JSON.stringify/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)); 
} 
Смежные вопросы