2016-03-21 4 views
1

Итак, я пытаюсь создать поле ввода, которое отображает результаты без необходимости обновления из внешнего файла JSON. Мой текущий код работает отлично, однако как бы я мог добиться проверки результатов во внешнем файле JSON, а не непосредственно в php-файле?Поиск Php AJAX с внешним файлом JSON

Мой JSON файл: (Я хотел бы отобразить результаты с "name").

[ 
{"name" : "300", "year" : "1999", "plot" : "X", "run" : "200 min", "rated" : "PG-13", "score" : "10/10", "source" : "A", "id" : "000"}, 
{"name" : "200", "year" : "1999", "plot" : "X", "run" : "200 min", "rated" : "PG-13", "score" : "10/10", "source" : "A", "id" : "000"} 
] 

Мой HTML и Javascript:

<script> 
function showHint(str) { 
if (str.length == 0) { 
    document.getElementById("txtHint").innerHTML = ""; 
    return; 
} else { 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      document.getElementById("txtHint").innerHTML = xmlhttp.responseText; 
     } 
    }; 
    xmlhttp.open("GET", "gethint.php?q=" + str, true); 
    xmlhttp.send(); 
} 
} 
</script> 
<p><b>Start typing a name in the input field below:</b></p> 
<form> 
First name: <input type="text" onkeyup="showHint(this.value)"> 
</form> 
<p>Suggestions: <span id="txtHint"></span></p> 

gethint.php

<?php 
//Instead of using these I'd like to use the external JSON file 
$a[] = "Anna"; 
$a[] = "Brittany"; 
$a[] = "Cinderella"; 
$a[] = "Diana"; 
// get the q parameter from URL 
$q = $_REQUEST["q"]; 
$hint = ""; 
// lookup all hints from array if $q is different from "" 
if ($q !== "") { 
$q = strtolower($q); 
$len=strlen($q); 
foreach($a as $name) { 
    if (stristr($q, substr($name, 0, $len))) { 
     if ($hint === "") { 
      $hint = $name; 
     } else { 
      $hint .= ", $name"; 
     } 
    } 
} 
} 
// Output "no suggestion" if no hint was found or output correct values 
echo $hint === "" ? "no suggestion" : $hint; 
?> 
+2

'$ films = json_decode (file_get_contents (" your_json_file.json "))' – Chris

+0

где бы я поместил переменную $ films в код php? –

+0

Вы использовали бы это вместо своей переменной '$ a', но обращаетесь к клавише' name' каждого фильма вместо прямого использования каждого элемента '$ a'. – Chris

ответ

1

Вам просто нужно, чтобы получить содержимое файла JSON с помощью file_get_contents, преобразовать его в массив фактического использования json_decode, и получите имя каждого элемента, чтобы проверить их по вашему поисковому запросу:

<?php 

// Here, the TRUE parameter is very important to treat it as an associative array 
$films = json_decode(file_get_contents("path/to/your_json_file.json"), true); 

// get the q parameter from URL if it is set 
$q = isset($_REQUEST["q"]) ? $_REQUEST["q"] : ""; 
$hint = ""; 
// lookup all hints from array 
$q = strtolower($q); 
$len = strlen($q); 
// For each film 
foreach($films as $film) {//          <------ 
    // Get the name 
    $name = $film['name'];//          <------ 
    // If the query is empty or if the query is found 
    if ($q === "" || stristr($q, substr($name, 0, $len))) {// <------ 
     if ($hint === "") { 
      $hint = $name; 
     } else { 
      $hint .= ", $name"; 
     } 
    } 
} 
// Output "no suggestion" if no hint was found or output correct values 
echo $hint === "" ? "no suggestion" : $hint; 


?> 
+0

Знаете ли вы, есть ли способ сделать это, чтобы отобразить все предложения, если не вводится поисковый запрос. Поскольку в настоящее время, если я что-то ищу, а затем удаляет поисковый запрос, предложения остаются. Id, как для него, чтобы отображать все предложения .. –

+0

@ S.Doe Конечно, я отредактировал свой ответ, чтобы сделать это (если '$ q' пуст, он напечатает все имена). – blex

Смежные вопросы