Ajax-Anwendungen auf https-Seiten

Begonnen von dobra, Dezember 01, 2012, 08:21:27

« vorheriges - nächstes »

0 Mitglieder und 1 Gast betrachten dieses Thema.

dobra

Werden Ajax Scripte (z.B. ajaxsearch) auf https-Seiten aufgerufen funktionieren diese nicht und es kommt es zu einem
NetworkError: 500 Internal Server Error - http://www....../cgi-bin/iboshop.cgi?ajax<Seitennummer>

Das kann man mit einer kleinen Änderung in ajax.ipl vermeiden:

Original-Script
sub print_scripts {
$out .= qq|
<script type="text/javascript">
// Server-URL für die Ajax-Abfragen
 var myinterface = "__xxpath__?ajax$gl_ajax_pageNr,__xxsession__";
</script>
<script type="text/javascript" src="$gl_path_to_ajax/json2.js"></script>
<script type="text/javascript" src="$gl_path_to_ajax/http/Request.js"></script>
<script type="text/javascript" src="$gl_path_to_ajax/jquery.js"></script>
<link rel="stylesheet" href="$gl_path_to_ajax/css/ajax.css">
|;

main::mprint $out;
}


ersetzen mit
sub print_scripts {
my $ajaxurl = qq|
   <script type="text/javascript">
   // Server-URL für die Ajax-Abfragen
     var myinterface = "__xxpath__?ajax$gl_ajax_pageNr,__xxsession__";
   </script>
|;

if ($main::secure) {
$ajaxurl = qq|
<script type="text/javascript">
// Server-URL für die Ajax-Abfragen
 var myinterface = "__xxspath__?ajax$gl_ajax_pageNr,__xxsession__";
</script>
|;
}

$out .= qq| $ajaxurl

   <script type="text/javascript" src="$gl_path_to_ajax/json2.js"></script>
   <script type="text/javascript" src="$gl_path_to_ajax/http/Request.js"></script>
   <script type="text/javascript" src="$gl_path_to_ajax/jquery.js"></script>
   <link rel="stylesheet" href="$gl_path_to_ajax/css/ajax.css">
|;

main::mprint $out;
}


Dadurch werden alle Ajax-Scripte auf https-Seiten automatisch mit

https://www.<SSL-Adresse>/cgi-bin/iboshop.cgi?ajax<Seitennummer>

eingebunden.

Ergebnis: alle Ajax-Anwendungen funktionieren auch auf https-Seiten  ;D

Diese Änderung ist z.B. unbedingt nötig, wenn man bei der neuen Adressverwaltung das "alternative Lieferadresse speichern" für eingeloggte Kunden verwendet, da das ja im Bestellablauf = i.d.R. nur auf https-Seiten passiert.
mfG
dobra

ahe

#1
Eine andere Möglichkeit ist es, 2 globale Variablen anzulegen.
Zb in der stdall.ipl damit die Variablen in allen Scripten zur Verfügung stehen.

<!--spmacro:module(globals)
our $CATDIR = $ssp::catalog_abs;
our $CGI = $ssp::xxpath;

# if (main::is_ssl()) { ## funktioniert so nicht im alternativen Bestellablauf
if ($ENV{HTTPS} eq 'on') {
   $CATDIR = $ssp::sec_catalog_abs;
   $CGI = $ssp::xxspath;
}
-->


Dann könnte die oben angeführte Funktion so geschrieben werden und man hätte die extra if-Bedingung gespart:

sub print_scripts {
$out .= qq|
<script type="text/javascript">
// Server-URL für die Ajax-Abfragen
 var myinterface = "$globals::CGI?ajax$gl_ajax_pageNr,__xxsession__";
</script>
<script type="text/javascript" src="$gl_path_to_ajax/json2.js"></script>
<script type="text/javascript" src="$gl_path_to_ajax/http/Request.js"></script>
<script type="text/javascript" src="$gl_path_to_ajax/jquery.js"></script>
<link rel="stylesheet" href="$gl_path_to_ajax/css/ajax.css">
|;

main::mprint $out;
}


Mit $globals::CATDIR kann man dann zum Beispiel Bilder und CSS-Dateien verlinken.
Zb main::mprint("$globals::CATDIR/bilder/testbild.png");
MfG ahe

dobra

Danke für das Script !
.... und bitte das auch in die DOKU aufnehmen.
ein "ottonormaluser" wie ich kann sowas ja nicht wissen ;)
mfG
dobra