Использование JQuery AJAX и php для извлечения данных из базы данных MySQL - PullRequest
0 голосов
/ 01 декабря 2011

Это пост, в котором у меня проблема с тем, что мой php-код не возвращает данные, которые он должен.У меня есть этот код api.php (под Joomla):

<?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 все в порядке (/5362673/iteratsiya-po-massivu-json-s-ispolzovaniem-jquery). Ошибка I 'm получает из 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 отображает это. Есть идеи?

Ответы [ 3 ]

0 голосов
/ 03 декабря 2011

Прежде чем включать каркас 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 или любой другой необходимый вам формат.

0 голосов
/ 05 декабря 2011

Решила ответить на свой вопрос.Это просто невозможно сделать.Я должен идти по маршруту компонента (создать свой собственный компонент).Насколько я понимаю, другого пути просто нет.

0 голосов
/ 01 декабря 2011

Можете ли вы избавиться от этого:

data: "",

из вызова ajax и посмотреть, что произойдет?Я никогда не видел, чтобы это проходило пустым, и было бы любопытно, если это что-то изменит.Joomla и ваш php могут расстроиться, если jQuery добавляет URL-адрес поста с дополнительными вещами, потому что он есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...