【问题标题】:JSON response return HTML inside a LoopJSON 响应在循环内返回 HTML
【发布时间】:2016-12-23 06:24:05
【问题描述】:

我在 Laravel 5.1 中有这个功能

public function calcolaKilometri()
    {

    $partenza = Input::get('partenza');
    $destinazione = Input::get('destinazione');
    $distanceMatrix = new DistanceMatrix(new Client(), new GuzzleMessageFactory()); 
    $response = $distanceMatrix->process(new DistanceMatrixRequest(
        [$partenza], 
        [$destinazione]
    )); 

        foreach ($response->getRows() as $row) {
        foreach ($row->getElements() as $element) {
        $distance = $element->getDistance();
        $text = $distance->text;
        $value = $distance->value;
        $data = ['text' => $text, 'value' => $value];       
        return \Response::json($data);  
            }       
        }

    }

需要返回 Ajax JSON 数据但是这个函数返回纯 HTML 响应,因为我们在一个 forech 循环中。我该怎么做?

【问题讨论】:

  • "但此函数返回纯 HTML 响应,因为我们处于 forech 循环中。"没有意义。
  • 当然这是问题所在。解析 returnif 以获取结果 2 foreach 循环,但结果为 1。在每个循环内。我需要在循环外传递变量

标签: json ajax laravel laravel-5


【解决方案1】:

我不确定我是否完全理解您在说什么,但我假设您希望返回在单个 JSON 响应中循环遍历结果集时找到的所有数据。

试试这样的:

// Your previous code...

// Initialise a $data array here, that we're going to fill with data
$data = [];

foreach ($response->getRows() as $row) {
    foreach ($row->getElements() as $element) {
        $distance = $element->getDistance();
        $text = $distance->text;
        $value = $distance->value;

        // Append the new set of data to your array
        $data[] = ['text' => $text, 'value' => $value];       
    }       
}

// Return the data as JSON only when we've filled it with everything
return response()->json($data);

【讨论】:

    【解决方案2】:

    使用会话解决。如果有人有同样的问题:

    public function calcolaKilometri()
        {
    
        $partenza = Input::get('partenza');
        $destinazione = Input::get('destinazione');
        $distanceMatrix = new DistanceMatrix(new Client(), new GuzzleMessageFactory()); 
        $response = $distanceMatrix->process(new DistanceMatrixRequest(
            [$partenza], 
            [$destinazione]
        )); 
        foreach ($response->getRows() as $row) {
            foreach ($row->getElements() as $element) {
                $text = $element->getDistance()->getText();
                $value = $element->getDistance()->getValue();
                \Session::put('testo', $text);
                \Session::put('valore', $value);
            }       
        }
    
    
    
    // Return the data as JSON only when we've filled it with everything
        $testo = \Session::get('testo');
        $valore = \Session::get('valore');
        $result = ['text' => $testo, 'value' => $valore];       
            return \Response::json($result); 
    
        }
    

    【讨论】:

      【解决方案3】:

      试试这个...

      $json = json_encode($data);
      return \Response::json($json);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-12
        • 1970-01-01
        • 1970-01-01
        • 2021-01-23
        • 2018-03-17
        • 2018-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多