У меня есть два json-файла, и я хочу объединить два файла JSON в один.
Php
<input type="text" name="image" /> <input type="text" name="file" />
Javascript для первого ввода
$('input[name=\'image\']').autocomplete({ minLength: 2, source: function( request, response ) { $.getJSON( "files/", { term: extractLast( request.term ) }, response ); }, create: function () { $(this).data("autocomplete")._renderItem = function(ul, item) { return $("<li></li>") .data("item.autocomplete", item) .append('<a><img src="files/' + item.label + '.jpg' /> ' + item.label + '</c></a>') .appendTo( ul ); }; }, });
Javascript для второго ввода
$('input[name=\'file\']').autocomplete({ minLength: 2, source: function( request, response ) { $.getJSON( "files/", { term: extractLast( request.term ) }, response ); }, create: function () { $(this).data("autocomplete")._renderItem = function(ul, item) { return $("<li></li>") .data("item.autocomplete", item) .append('<a>' + item.label + '</c></a>') .appendTo( ul ); }; }, });
json для первого ввода
if (empty($_GET['term'])) exit ; $q = strtolower($_GET["term"]); if (get_magic_quotes_gpc()) $q = stripslashes($q); $files = array(); foreach(glob('image/*.jpg*', GLOB_BRACE) as $key=>$file) { $files[] = substr($file, 0, -4); } $files = array_unique($files); $files = array_combine($files, $files); $result = array(); foreach ($files as $key=>$value) { if (strpos(strtolower($key), $q) !== false) { array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($key))); } if (count($result) > 11) break; } echo json_encode($result);
json для второго входа
if (empty($_GET['term'])) exit ; $q = strtolower($_GET["term"]); if (get_magic_quotes_gpc()) $q = stripslashes($q); $files = array(); foreach(glob('image/*.txt*', GLOB_BRACE) as $key=>$file) { $files[] = substr($file, 0, -4); } $files = array_unique($files); $files = array_combine($files, $files); $result = array(); foreach ($files as $key=>$value) { if (strpos(strtolower($key), $q) !== false) { array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($key))); } if (count($result) > 11) break; } echo json_encode($result);
Как вывести все в одно? Есть проблема с json beacause, первый вход только показывает имя файла изображения с предварительным просмотром, а во втором – только имя текстовых файлов, а затем как интегрировать json-файлы в один?
Это решение:
HTML:
<input type="text" name="image" /> <input type="text" name="file" />
Javascript:
function split( val ) { return val.split( /,\s*/ ); } function extractLast( term ) { return split( term ).pop(); } $("input[name='image'], input[name='file']").autocomplete({ minLength: 2, source: function(request, response) { var thisType = this.element[0].name; $.getJSON("/test", { term: extractLast(request.term), type: thisType }, response ); } }).autocomplete( "instance" )._renderItem = function( ul, item ) { var thisType = this.element[0].name; if (thisType == 'image') { return $("<li></li>") .data("item.autocomplete", item) .append('<a><img src="files/' + item.label + '.jpg" />' + item.label + '</a>') .appendTo( ul ); } else { return $("<li></li>") .data("item.autocomplete", item) .append('<a>' + item.label + '</a>') .appendTo( ul ); } };
PHP:
<?php if (empty($_GET['term'])) exit; $q = strtolower($_GET["term"]); $type = strtolower($_GET["type"]); if (get_magic_quotes_gpc()) $q = stripslashes($q); $files = array(); if ($type == 'image') { foreach(glob('image/*.jpg*', GLOB_BRACE) as $key=>$file) { $files[] = substr($file, 0, -4); } } else { foreach(glob('image/*.txt*', GLOB_BRACE) as $key=>$file) { $files[] = substr($file, 0, -4); } } $files = array_unique($files); $files = array_combine($files, $files); $result = array(); foreach ($files as $key=>$value) { if (strpos(strtolower($key), $q) !== false) { array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($key))); } if (count($result) > 11) break; } echo json_encode($result);