it-swarm.com.de

Verwenden von Ajax in einer Komponente ohne Verwendung von com_ajax?

Ich mache eine Übungskomponente und möchte versuchen, eine Ajax-Suche durchzuführen. In meiner Komponente habe ich 2 Methoden erstellt. Methode search() und searchRes(). Das erste hat das HTML-Formular für die Suchleiste und das zweite behandelt die PHP-> MySQL-Arbeit, die die Ergebnisse zurückgibt. Im Moment drucke ich die Ergebnisse @ index.php?option=com_pelatol&task=searchRes.

Trotzdem möchte ich etwas Ajax implementieren, um die Ergebnisse unterhalb des Formulars auszugeben. Ich versuche seit Stunden, das richtige JQuery-Skript zu erreichen, aber ich kann es nicht erledigen. Ich habe versucht, es mit com_ajax zu tun, aber ich habe viel mehr verloren als ohne.

So sieht das Skript im Moment aus:

$js = <<<JS
(function ($) {
    $(document).on('click', '.srcButton', function () {
        var value   = $('.ajaxform').serialize(),
            request = {
                    'option' : 'com_pelatol',
                    'component' : 'com_pelatol',
                    'data'   : value,
                    'format' : 'raw'


            };

        $.ajax({
            type   : 'GET',
            url    : 'index.php?option=com_pelatol&task=searchRes'
            data   : request,
            format : raw,
            success: function (response) {
                $('.theResults').html(response);
            }
        });
        return false;
    });
})(jQuery)
JS;
$doc->addScriptDeclaration($js);

Ich bin mir sicher, dass dies falsch ist, aber ich weiß nicht, wie ich es beheben soll:

'option' : 'com_pelatol',
'component' : 'com_pelatol',

Methodensuche () (Ich habe die Aktion aus dem Formular entfernt, damit sie nicht weitergeleitet wird.)

 function search() {
    //action="'.$route.'" method="GET" id="ajaxform" 
    $route= JRoute::_( 'index.php?option=com_pelatol&task=searchRes');
    $html='<div class="searchContainer">';
    $html.='<h3 style="text-align:center;"> Search Area </h3>';
    $html.='<p>  Search By term: </p>';
    $html.='<form ><div class="radio">';
    $html.='<input type="hidden" name="option" value="com_pelatol" />';
    $html.='<input type="hidden" name="task" value="searchRes" />';
    $html.='<input id="id" type="radio" name="term" value="ID">';
    $html.='<label for="id">Id</label>';
    $html.='<input id="lastName" type="radio" name="term" value="LASTNAME">';
    $html.='<label for="lastName">Last Name</label>';
    $html.='<input id="firstName" type="radio" name="term" value="FIRSTNAME">';
    $html.='<label for="firstName">First Name</label>';
    $html.='<input id="email" type="radio" name="term" value="EMAIL">';
    $html.='<label for="email">Email</label>';
    $html.='<input id="all" type="radio" name="term" value="all">';
    $html.='<label for="all">All</label>';
    $html.='<br/><br/>';
    $html.='<input type="text" name="query"/>';
    $html.='<input class="srcButton"? type="submit" value="Search"/>';
    $html.='</div></form></div>';
    $html.='<div id="theResults"></div>';
    echo $html;


    }

und das ist die SearchRes Methode:

function searchRes() {

$term=$_GET['term'];
$src=$_GET['query'];
if ($term=="all") {
    //will fill it later
}else {
    $hq=$term;
}
$db=JFactory::getDbo();
$query='Select * from #__pelatologio where '.$hq.' LIKE "'.$src.'"';
$db->setQuery($query);
$options=$db->loadObjectList();

foreach ($options as $row) {
    $query2='SELECT * from #__akinita where NAMEID='.$row->ID;
    $db->setQuery($query2);
    $options2=$db->loadObjectList();
    echo '<div class="resContainer">';
    echo '<div class="userRes">';
    echo '<span>ID: </span>';
    echo $row->ID;
    echo '<br/><span>Last Name: </span>';
    echo $row->LASTNAME;
    echo '<br/><span>First Name: </span>';
    echo $row->FIRSTNAME;
    echo '<br/><span>Email: </span>';
    echo $row->EMAIL;
    echo '</div>';
    echo '<br/><span>Ακίνητα Χρήστη</span>';
    foreach($options2 as $akin) {
        echo '<div class="akinRes">';
        echo '<span>ID: </span>';
        echo $akin->ID;
        echo '</br><span>Είδος: </span>';
        echo $akin->EIDOS;
        echo '</br><span>Περιοχή: </span>';
        echo $akin->PERIOXI;
        echo '</br><span>Εμβαδόν: </span>';
        echo $akin->EMBADON;
        echo '</br><span>Δωμάτια: </span>';
        echo $akin->IPNODOMATIA;
        echo '</br><span>Μπάνια: </span>';
        echo $akin->MPANIA;
        echo '</br><span>Ετος: </span>';
        echo $akin->ETOS;
        echo '</br><span>Θέρμανση: </span>';
        echo $akin->THERMANSI;
        echo '</br><span>Διαθέσιμο: </span>';
        echo $akin->DIATHESIMO;
        echo '</br><span>Οδός: </span>';
        echo $akin->ADDRESS;
        echo '</br><span>Τιμή: </span>';
        echo $akin->PRICE;


    }
    echo '</div>';

}
echo '<br clear="both" />';

}

Kann mir jemand genauer erklären, wie das geht? Ich dachte daran, eine neue Komponente nur für den Ajax-Aufruf zu erstellen.

2
IseNgaRt

Es gibt eine ganze Reihe von Möglichkeiten, um AJAX ohne com_ajax aufzurufen. Schauen Sie sich Was ist der richtige Weg, um ein AJAX Call eine Methode zu verstehen und zu wählen und dann Ihre Suchlogik entsprechend anzuwenden.

1
GDP

Wenn Sie nur Ihren JS überprüfen, sollte er vielleicht so geschrieben sein, vorausgesetzt, es handelt sich um ein jQuery-abhängiges Skript:

$js = "
    jQuery(document).ready(function() {
                    //your code
                });
            ";
JFactory::getDocument()->addScriptDeclaration($js);

Oder

JFactory::getDocument()->addScriptDeclaration("
jQuery(function($) {
    //your code
});");
1
ghazal