【问题标题】:500 "Internal Server Error" with ajax in Joomla在 Joomla 中使用 ajax 出现 500“内部服务器错误”
【发布时间】:2016-08-01 21:13:39
【问题描述】:

我在前端 joomla 站点使用 Ajax,但不幸的是它没有运行。这是我的代码:

/components/com_prova/js/dashboard.js

$.ajax({
        url: "index.php?option=com_prova&task=ajaxraw.updateReserve&format=raw",
        data: { robotId: idRobot, reserved: book}
          }).done(function(response) {
              console.log(response);
    }); 

/components/com_prova/controllers/ajaxraw.php

<?php
defined('_JEXEC') or die( 'Restricted access' );
jimport('joomla.application.component.controller');
jimport('functions.php');
class MycomponentControllerAjaxraw extends JController
{
     function updateReserve(){

     $booked = JRequest::getVar('reserved');
     $robotId = JRequest::getVar('robotId');

     $db_external=db_ext();

     $query = $db_external->getQuery(true);         
     $query = 'UPDATE robots SET booked='.$booked.' WHERE id='.$robotId;    

     $db_external->setQuery($query);
     $db_external->query();
}
}
?>

我收到此错误:

 jquery-1.12.3.min.js:4 GET http://xxxxxxxx/xxxxxxx/index.php?option=com_prova&task=ajaxraw.updateReserve&format=raw&robotId=1&reserved=1&lang=it 500 (Internal Server Error)

我已经阅读了不同的帖子,但没有任何效果....请帮助!

更新

function db_ext(){

$option = array(); 

$option['driver']   = 'mysql';            // Database driver name
$option['host']     = 'xxxxxx';                 // Database host name
$option['user']     = 'xxxxxxx';   // User for database authentication
$option['password'] = 'xxxxxxxx';     // Password for database authentication
$option['database'] = 'xxxxxxxxx';   // Database name
$option['prefix']   = '';                 // Database prefix (may be empty)
$db_external = &JDatabase::getInstance( $option );
return $db_external;
}

更新调试

如果我去

index.php?option=com_prova&task=ajaxraw.updateReserve&format=raw&robotId=2&reserved=1&lang=en

我有这个错误

Invalid controller: name='ajaxraw', format='raw'

有人可以帮助我吗?

【问题讨论】:

  • Request 已弃用。请使用JInput。您还应该使用Joomla's API properly 进行数据库查询
  • index.php 中有什么内容?该文件似乎正在生成 500 错误。
  • @Marcus - index.php 是 Joomla 的核心文件,应用程序从中执行。那不会是问题;)
  • @Lodder 输入法没问题。我也试过 $_REQUEST 但问题是一样的。我已经用 db_ext() 函数更新了帖子
  • @Marcus Lodder 是对的,问题不在 index.php 中 :(

标签: php ajax joomla


【解决方案1】:

我为您修复的以下代码不是可靠的解决方案,但会将您推向正确的方向,因为您的代码目前存在很多问题:

  • API 使用不正确
  • 不推荐使用的函数
  • 调用函数的方法不正确

注释掉你所有的 Ajax 代码,让我们试着用 PHP 获得一些结果:

class MycomponentControllerAjaxraw extends JController
{
    public function updateReserve()
    {
        $input = JFactory::getApplication()->input;

        $booked  = $input->get('reserved', '', 'INT');
        $robotId = $input->get('robotId', '', 'INT');

        $db = $this->external_db();

        $query = $db->getQuery(true);

        $fields = array(
            $db->quoteName('booked') . ' = ' . (int)$booked
        );

        $conditions = array(
            $db->quoteName('id') . ' = ' . (int)$robotId
        );

        $query->update($db->quoteName('robots'))->set($fields)->where($conditions);

        $db->setQuery($query);

        $result = $db->execute();
    }

    private function external_db()
    {
        $option = array();

        $option['driver']   = 'mysql';
        $option['host']     = 'xxx';
        $option['user']     = 'xxx';
        $option['password'] = 'xxx';
        $option['database'] = 'xxx';
        $option['prefix']   = '';

        $db = JDatabaseDriver::getInstance($option);

        return $db;
    }
}

【讨论】:

  • 好的,但是如果我注释掉所有的ajax,我必须使用post方法,重新加载页面。我叫什么?如何调用控制器方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多