2015-10-08 168 views
1

我有一個基於PHP瘦客戶端的API,並希望爲我的網站生成JSONP。當我致電網站時:'http://api.mangayurdu.com/users?callback=JSON_CALLBACK'。它返回一個帶有JSON CALLBACK()的空白頁面。登錄到控制檯時,它是未定義的。未定義的JSONP跨域

API的index.php文件:

<?php 
require 'vendor/autoload.php'; 

$app = new \Slim\Slim(); 
$app->contentType('application/json'); 
$app->get('/users', 'getUsers'); 
$app->run(); 

function getConnection() { 
$dbhost="localhost"; 
$dbuser=""; 
$dbpass=""; 
$dbname=""; 
$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname;mysql:charset=utf8mb4", $dbuser, $dbpass); 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

return $dbh; 
} 

function getUsers() { 
$sql = "select * FROM manga"; 
try { 
    $db = getConnection(); 
    $stmt = $db->query($sql); 
    $users = $stmt->fetchAll(PDO::FETCH_OBJ); 
    $db = null; 
    echo $_GET['callback'] . '('.json_encode($users).')'; 
} 
catch(PDOException $e) { 
    echo $_GET['callback'] . '('.json_encode($e->getMessage()).')'; 
} 
} 

的Javascript:

.factory('MY', function($http){ 
var fax= {}; 
var url = 'http://api.mangayurdu.com/users?callback=JSON_CALLBACK'; 
fax.isimler = $http.jsonp(url); 
return fax; 
}) 

.controller('indexCtrl', function($scope, MY) { 
MY.isimler.success(function(alHemen){ 
     $scope.mangas = alHemen; 
}); 
}) 

enter image description here

+0

@JamesThorpe - 「它的空白頁上寫有JSON CALLBACK()」。 - 回調函數的參數未定義。 – Quentin

+0

@Quentin所以我的用戶變量是空的?它沒有連接到數據庫? – Nasuh

+0

@Nasuh - 不知道。自從添加PDO之前,我還沒有使用過PHP。我不知道它如何對連接失敗做出反應。 – Quentin

回答

0

不要成爲它application/json。將其作爲application/javascript。 JSONP需要執行。

此外,它與苗條出現,你不應該使用echo。嘗試撥打$app->response->setBody

+0

儘管這是一個有用的評論,但它與PHP不在'encode_json'中輸出任何數據的問題無關。 – Quentin

+0

@Quentin擴展。 –

+0

「echo」的使用不成問題。如果是,它不會輸出'JSON_CALLBACK()' – Quentin