2016-04-11 10 views
0

Ich benutze Ajax am Front-End-Joomla-Website, aber leider läuft es nicht. Hier ist mein Code:500 "Interner Server Fehler" mit Ajax in Joomla

/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(); 
} 
} 
?> 

ich diesen Fehler:

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) 

Ich habe verschiedene Beiträge darüber gelesen, aber nichts funktioniert .... bitte helfen!

UPDATE

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; 
} 

UPDATE DEBUG

Wenn ich gehe zu

index.php? Option = com_prova & task = ajaxraw.updateReserve & format = raw & robotId = 2 & reserviert = 1 & lang = de

Ich habe diesen Fehler

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

Jemand kann mir helfen?

+0

"Anforderung" ist veraltet. Bitte verwenden Sie [JInput] (http://docs.joomla.org/Retrieving_request_data_using_JInput). Sie sollten auch [Joomla API richtig] (http://docs.joomla.org/Inserting,_Updating_and_Removing_data_using_JDatabase) für Ihre Datenbank-Abfrage verwenden – Lodder

+0

Was ist in 'index.php'? Diese Datei scheint den Fehler 500 zu erzeugen. – Marcus

+0

@Marcus - 'index.php' ist Joomlas Kerndatei, von der die Anwendung ausgeführt wird. Das wird nicht das Problem sein;) – Lodder

Antwort

1

Der folgende Code, den ich für Sie nicht die feste Lösung fixiert up haben, aber werden Sie in die richtige Richtung drücken, wie es zur Zeit viel falsch mit Ihrem Code, wie es steht:

  • Falsche Verwendung von API
  • Veraltete Funktionen
  • falschen Ansatz für den Aufruf von Funktionen

Kommentieren Sie alle Ihre Codes Ajax und lassen Sie sich einfach versuchen und einige Ergebnisse zeigen, nur mit PHP zu erhalten:

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; 
    } 
} 
+0

ok, aber wenn ich den ganzen Ajax auskommentiere, muss ich die post-Methode verwenden und die neu laden Was kann ich aufrufen? Wie kann ich die Controller-Methode aufrufen? – hteo

+0

debug update :) – hteo

Verwandte Themen