JSON响应在循环内返回HTML

时间:2016-08-16 18:45:38

标签: json ajax laravel laravel-5.1

我在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循环中。我怎么能做到这一点?

3 个答案:

答案 0 :(得分:0)

试试这个...

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

答案 1 :(得分:-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 :(得分:-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) {
            $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); 

    }