2011-12-01 209 views
0

這是後續的帖子,我遇到了問題,我的php代碼沒有返回它應該返回的數據。我有(下的Joomla)這個api.php代碼:使用JQuery AJAX和PHP從mysql數據庫獲取數據

<?php 
require_once ('includes/defines.php'); 
require_once ('includes/framework.php'); 

/* Create the Application */ 
$app = JFactory::getApplication('site'); 

/* Make sure we are logged in at all. */ 
if (JFactory::getUser()->id == 0) 
    die("Access denied: login required."); 

//get current user 
$user =& JFactory::getUser(); 
// get a reference to the database 
$db = &JFactory::getDBO(); 

$query_camera_name = "SELECT camera_name, camera_status, camera_quality, email_notice, camera_hash, camera_type FROM #__cameras WHERE user_id=".$user->id." AND camera_status!='DELETED'"; 
$db->setQuery($query_camera_name); 
//get number of cameras so we can build the table accordingly 
$db->query(); 
$num_rows = $db->getNumRows(); 
// We can use array names with loadAssocList. 
$result_cameras = $db->loadAssocList(); 
header('Content-Type: application/json'); 
echo json_encode($result_cameras); 
?> 

自身收益有效的JSON代碼此代碼。然後我有我的client.php代碼在那裏顯示一些結果。

<html> 
<head> 
<link href="ajax_dashboard/webcam_widget.css" rel="stylesheet" type="text/css" /> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script> 
</head> 
<body> 

<h3>Output: </h3> 
<div id="output">Append this text</div> 

<script id="source" language="javascript" type="text/javascript"> 
var js = jQuery.noConflict(); 

js(function() 
{ 
js.ajax({          
    url: 'ajax_dashboard/api.php',     //the script to call to get data   
    data: "",       
    dataType: 'json',    //data format  
    success: function(data, textStatus, xhr) { 
    console.log(xhr); 
    js.each(data, function() { 

     js.each(this, function(k, v) { 
      js('#output').append("<b>key: </b>"+k+"<b> value: </b>"+v); 

    }); 

    }); 

} 
}); 
}); 
</script> 
</body> 
</html> 

我有幫助的另一篇文章的jQuery代碼就好了驗證,從用戶(http://stackoverflow.com/questions/8329495/iterate-over-json-array-using-jquery)。我得到的錯誤是從jQuery的

對象爲空

額外的控制檯消息給出了這樣的還有:{對象的readyState = 4,狀態= 200,狀態文本= 「OK」}和responseText =「」

出於某種原因,JSON代碼沒有通過正確的。這是發生了什麼,當我看JSON代碼,誰想要驗證:

[ 
{ 
    "camera_name": "ffgg", 
    "camera_status": "DISABLED", 
    "camera_quality": "MEDIUM", 
    "email_notice": "DISABLED", 
    "camera_hash": "0d5a57cb75608202e64b834efd6a4667a71f6dee", 
    "camera_type": "WEBCAM" 
}, 
{ 
    "camera_name": "test", 
    "camera_status": "ENABLED", 
    "camera_quality": "HIGH", 
    "email_notice": "ENABLED", 
    "camera_hash": "6ab000ef7926b4a182f0f864a0d443fc19a29fdd", 
    "camera_type": "WEBCAM" 
} 
] 

我想它是與Joomla是顯示這種方式。有任何想法嗎?

+0

你確定'ajax_dashboard/api.php'指的是實際的文件名嗎? – mc10

+0

是的,它是正確的。 – Tom

回答

0

決定回答我自己的問題。這是不可能的。我必須去組件路由(創建你自己的自定義組件)。據我所知,除此之外別無他法。

0

你能擺脫這樣的:

data: "", 
從Ajax調用

,並看看會發生什麼?我從來沒有見過那樣空洞,如果這會改變任何事情,我會好奇的。 Joomla和你的PHP可能會感到沮喪,如果jQuery的附加額外的東西,因爲在那裏後的URL。

+0

數據是一個可選參數,所以我應該想象將它留空將會產生相同的效果。 –

+0

當我刪除它時仍然是同樣的問題。 – Tom

0

在包含Joomla框架和其他文件之前,您必須先定義JEXEC變量,因爲所有其他文件都會在繼續之前檢查此變量是否已定義。

這是他們進行檢查:

defined('_JEXEC') or die('Restricted access'); 

爲解釋在這裏:http://docs.joomla.org/Why_do_most_of_the_Joomla!_PHP_files_start_with_%22defined%28%27_JEXEC%27%29...%3F

您需要將此行添加到您的文件:

define('_JEXEC', 1); 

不過提醒一句「危險將羅賓遜,危險」

你可能會更安全地調用主Joomla入口點並將請求路由到您自己的組件。這很容易做到,你可以壓縮所有Joomla的外部輸出,並調用你自己的組件的輸出,指定佈局爲html,json,xml或任何其他你需要的格式。

相關問題