这是跟进帖子,在我遇到问题的情况下,我的php代码未返回应有的数据。 我有这个api.php代码(在Joomla下):
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代码在那里显示了一些结果。
Output:
Append this text
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("key:"+k+" value:"+v);
});
});
}
});
});
我已经在另一篇文章的用户帮助下验证了jquery代码很好(http://stackoverflow.com/questions/8329495/iterate-over-json-array-using-jquery)。 我得到的错误是从jQuery的
对象为空
额外的控制台消息也提供了此信息:Object {readyState = 4,status = 200,statusText =" 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展示此内容的方式有关。 有任何想法吗?
您确定ajax_dashboardapi.php是指实际的文件名吗?
是的,没错。
决定回答我自己的问题。只是不可能这样做。我必须走组件路线(创建自己的自定义组件)。据我所知,别无选择。
在包含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 );
但是警告一词" DANGER WILL ROBINSON,DANGER"
调用主Joomla入口点并将请求路由到您自己的组件可能会更安全。这相当容易做到,您可以取消Joomla的所有无关紧要的输出,并仅调用您自己组件的输出,将布局指定为html,json,xml或所需的任何其他格式。
你能摆脱这个:
data:"",
从ajax调用,看看会发生什么?我从来没有见过它是空的,并且好奇是否会改变任何东西。如果jQuery在发布URL后面附加了多余的内容,那么Joomla和您的php可能会感到沮丧,因为那是存在的。
数据是一个可选参数,因此我应该想象将其保留为空白将具有相同的效果。
当我删除它仍然是同样的问题。