您好我有代码Ajax从数据库返回值:
function showResult(str) {
action = 'http://localhost/mateusz/mateusz/public/villages/query/';
if (str.length==0) {
document.getElementById("resultSearch").innerHTML="";
document.getElementById("resultSearch").classList.remove("border-search-city");
return;
}
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (this.readyState==4 && this.status==200) {
document.getElementById("resultSearch").innerHTML=this.responseText;
document.getElementById("resultSearch").classList.add("border-search-city");
}
}
xmlhttp.open("GET",action + str, true);
xmlhttp.send();
}
编写php以连接数据库:
public function query($name) {
$villages = Village::select('id','name', 'province_id')->where('name', 'like', '%' . $name . '%')->get();
for ($i=0; $i<=count($villages); $i++) {
$returnQuery = $villages;
}
if ($returnQuery != '' || $returnQuery != null) {
return '<a href="">'.$returnQuery.'</a>';
} else {
return "Nic nie mam";
}
}
这是搜索值的代码形式:
{!! Form::text('string', NULL, ['class' => 'form-control', 'placeholder' => 'podaj frazę', 'onkeyup' => 'showResult(this.value)']) !!}
<div id="resultSearch"></div>
代码php在Json中返回值,如下所示:
[{ “ID”:261, “姓名”: “多布雷”, “province_id”:2},{ “ID”:1128, “姓名”: “多布雷”, “province_id”:7},{” ID “:1992年,” 名 “:” 多布雷 斯托”, “province_id”:14}]
我需要a href
中的返回值,以及新行中的每条记录。
方法pluck()
和toArray()
不起作用。
编辑:
我使用json_decode()
:
for ($i=0; $i<=count($villages); $i++) {
$returnQuery = $villages;
}
if (!empty($returnQuery)) {
$someArray = json_decode($returnQuery, true);
print_r($someArray);
echo $someArray[0]["name"];
}
但是当我搜索名称“Dobre”时只返回一条记录,但在数据库中我有3条记录,名称为“Dobre”。方法print_r()
返回:
数组([0] =&gt;数组([id] =&gt; 261 [名称] =&gt; Dobre [province_id] =&gt; 2 )1 =&gt;数组([id] =&gt; 1128 [名称] =&gt; Dobre [province_id] =&gt; 7)[2] =&GT;数组([id] =&gt; 1992 [名字] =&gt; Dobre Miasto [province_id] =&gt; 14))
我不知道如何设置此行[0]
中的数组编号:
echo $someArray[0]["name"];
答案 0 :(得分:3)
首先将json转换为数组。使用input_filename = 'toto'
output_filename = 'toto.json'
with open(input_filename, 'r') as inputf:
lines = ['{},\n'.format(line.rstrip()) for line in inputf]
lines = ['['] + lines + [']']
with open(output_filename, 'w') as outputf:
outputf.writelines(lines)
。 for more information about json handle in PHP
json_decode()
答案 1 :(得分:0)
对于PHP
您可以使用json_decode()
$array = json_decode('[{"id":261,"name":"Dobre","province_id":2},{"id":1128,"name":"Dobre","province_id":7},{"id":1992,"name":"Dobre Miasto","province_id":14}]');
for ($i=0; $i<=count($array); $i++) {
echo $array [$i]->name;
}
如果您在javascript代码块中收到此json,则需要使用JSON.parse()
。
你需要将你的json传递给parse方法,比如
var obj = JSON.parse('[{"id":261,"name":"Dobre","province_id":2},{"id":1128,"name":"Dobre","province_id":7},{"id":1992,"name":"Dobre Miasto","province_id":14}]');
alert(obj[0]['id']) // it will return 261
答案 2 :(得分:0)
我找到了解决方案,只是将循环更改为foreach
:
foreach ($villages as $key => $value) {
echo "<a href='".$value["id"]."'>".$value["name"]."</a><br>";
}
帮助我这个链接:来自Convert and Loop through JSON with PHP and JavaScript Arrays/Objects的Bilal Ahmed。
答案 3 :(得分:0)
基于你的文字 “但是当我搜索名称”Dobre“只返回一条记录时,但在数据库中我有3条记录,名称为”Dobre“。方法print_r()返回:”
您的问题不是json相关但它只返回一条记录而不是第三条记录吗?
您需要遍历记录数据。
这样的事可能
public function query($name) {
$villages = Village::select('id','name', 'province_id')->where('name', 'like', '%' . $name . '%')->get();
$returnQuery = '';
try {
$villages = json_decode($villages, true);
for ($i=0; $i < count($villages); $i++) {
$returnQuery = '<a href="">' . $villages[$i]['name'] . '</a>';
}
} catch (Exception $e) {
// Always good idea to catch json to prevent error if bad data is pass.
}
if ($returnQuery != '') {
return $returnQuery;
} else {
return "Nic nie mam";
}
}