2017-04-12 53 views
0

當我試圖從AJAX一切PHP文件接收JSON數據正常工作:如何從硅石控制器接收JSON數據AJAX

test.php的

<?php 
header("Content-Type: application/json; charset=UTF-8"); 
$pdo = new PDO('mysql:host=localhost;dbname=database', 'root', ''); 
$stmt = $pdo->prepare("SELECT id, name FROM table"); 
$stmt->execute(); 
$stmt = $stmt->fetchAll(PDO::FETCH_CLASS); 

echo json_encode($stmt); 
?> 

main.js

var xmlhttp = new XMLHttpRequest(); 
xmlhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     myObj = JSON.parse(this.responseText); 
     console.log(myObj); 
     document.getElementById("par").innerHTML = myObj[4].id + " " + myObj[4].tag1; 
    } 
}; 
xmlhttp.open("GET", "http://localhost/project/app/models/Test.php", true); 
xmlhttp.send(); 

但是,當我試圖從硅石控制器接收JSON:

Ajax.php

namespace AI\models; 
use Silex\Application; 
use Silex\Api\ControllerProviderInterface; 

class Ajax implements ControllerProviderInterface 
{ 
    public function connect(Application $app){ 
    $controllers = $app['controllers_factory']; 
    $controllers->get('/', 'AI\models\Ajax::home'); 
    return $controllers; 
    } 

    public function home(Application $app){ 
    header("Content-Type: application/json; charset=UTF-8"); 
    $result = $app['db']->prepare("SELECT id, name FROM table"); 
    $result->execute(); 
    $result = $result->fetchAll(\PDO::FETCH_CLASS, \AI\models\Ajax::class); 
    echo json_encode($result); 

    return $app['twig']->render('ajax.twig'); 
    } 

} 

main.js

var xmlhttp = new XMLHttpRequest(); 
xmlhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     myObj = JSON.parse(this.responseText); 
     console.log(myObj); 
     document.getElementById("par").innerHTML = myObj[4].id; 
    } 
}; 
xmlhttp.open("GET", "http://localhost/project/app/models/Ajax.php", true); 
xmlhttp.send(); 

我在控制檯中的錯誤:

Uncaught SyntaxError: Unexpected token < in JSON at position 0 
    at JSON.parse (<anonymous>) 
    at XMLHttpRequest.xmlhttp.onreadystatechange (main.js:4) 
xmlhttp.onreadystatechange @ main.js:4 

我沒有任何想法,爲什麼會出現,當我嘗試接收JSON問題來自一堂課。

回答

0

如果你要返回json,你應該使用JsonResponse Object。你也絕對不想像現在那樣渲染一個模板,你只是想要json數據,爲什麼要渲染一個模板?

你可以按照以前鏈接的文檔,但幸運Silex has a helper method for returning json data,你甚至都不需要使用JsonResponse(直接):

<?php 

public function home(Application $app){ 

    $result = $app['db']->prepare("SELECT id, name FROM table"); 
    $result->execute(); 
    $result = $result->fetchAll(\PDO::FETCH_CLASS, \AI\models\Ajax::class); 

    return $app->json($result); 
} 
+0

我想是因爲我需要輕鬆變量返回JSON內部控制器從URL到數據庫查詢,然後以JSON的形式獲取數據。這就是爲什麼我試圖渲染模板來獲取使用該頁面的Ajax腳本(包括樹枝變量)。 – robotluke

+0

我不認爲我理解你的問題。你能編輯你的問題併發布'''''ajax.twig文件'''的內容嗎? – mTorres

+0

另外我的意思是,在您的AJAX調用中,您不想呈現模板,您必須呈現模板才能轉到您的客戶端代碼(JS)進行AJAX調用的頁面。這有意義嗎? – mTorres

相關問題