Ajax在Array中返回Json,转换为字符串

时间:2017-12-20 11:03:57

标签: php json ajax

您好我有代码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}]

enter image description here 我需要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"];

4 个答案:

答案 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/ObjectsBilal 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";
    }
}