2008-08-08 28 views
2

Der Rahmen:
Das fragliche Programm versucht, im selben Paket wie der Aufrufer enthalten Formulardaten über einen AJAX-Aufruf an eine Zielprozedur zu posten. Dies wird für eine Site ausgeführt, die eine sichere Verbindung (HTTPS) verwendet. Die hier verwendete Technologie ist PLSQL und die DOJO JavaScript-Bibliothek. Das Entwicklungstool ist basically a text editor.Debugging: IE6 + SSL + AJAX + Post form = 404 Fehler

Codeschnipsel:

> function testPost() { 
>> dojo.xhrPost({ 
      url: ''dr_tm_w_0120.test_post'', 
      form: ''orgForm'', 
      load: testPostXHRCallback, 
      error: testPostXHRError 
      }); 
     } 

> function testPostXHRCallback(data,ioArgs) { 
>>   alert(''post callback''); 
      try{ 
      dojo.byId("messageDiv").innerHTML = data; 
      } 
      catch(ex){ 
       if(ex.name == "TypeError") 
       { 
        alert("A type error occurred."); 
       } 
      } 
      return data; 
     }   
> 
function testPostXHRError(data, ioArgs) {  
>>   alert(data); 
      alert(''Error when retrieving data from the server!''); 
      return data; 
     }  

Das Problem:
Wenn IE6 (die die gesamte Benutzer-Basis verwendet), wobei die Antwort von dem Server zurückgesendet 404 ist ein Fehler.

Beobachtungen:
Das Programm funktioniert in Firefox in Ordnung.
Die aufrufende Prozedur kann nicht auf Prozeduren innerhalb desselben Pakets abzielen.
Die aufrufende Prozedur kann auf externe Websites (sowohl http als auch https) zugreifen.
Die anderen AJAX-Aufrufe im Paket, die keine Posts von Formulardaten sind, funktionieren einwandfrei.
Ich habe die Internets gesucht und mit erfahrenen Team-Mitgliedern konsultiert und habe nichts entdeckt, das das Problem zufriedenstellend anspricht.
* Versucht Q&A in Dojo-Support-Foren.

Die Fragen:
Welche Techniken zur Fehlerbehebung empfehlen Sie?
Welche Tools zur Fehlerbehebung empfehlen Sie für die HTTPS-Analyse?
Irgendwelche Hypothesen darüber, was das Problem sein könnte?
Irgendwelche Ideen für Workarounds, die nicht vollständige (schlechte) Hacks sind?

Ed. Die Lösung
lomaxx, thx für die fiddler Spitze. Sie haben keine Ahnung, wie toll es war, das zu bekommen und es als Debugging-Tool zu benutzen. nachdem es die Inbetriebnahme ist das, was ich gefunden und, wie ich es fest (zumindest auf kurze Sicht):

> ef Fri, 8 Aug 2008 14:01:26 GMT dr_tm_w_0120.test_post: SIGNATURE (parameter names) MISMATCH VARIABLES IN FORM NOT IN PROCEDURE: SO1_DISPLAYED_,PO1_DISPLAYED_,RWA2_DISPLAYED_,DD1_DISPLAYED_ NON-DEFAULT VARIABLES IN PROCEDURE NOT IN FORM: 0 

Nachdem die Nachricht von dem Server zu sehen, trat ich um Fiddler ein bisschen mehr zu sehen, was ich sonst noch könnte daraus lernen. Es wurde festgestellt, dass auf der Registerkarte WebForms die Werte im Webformular angezeigt werden. Würdest du es nicht wissen, die obigen "xxx_DISPLAYED_" Felder waren drin.

Ich verstehe noch nicht wirklich, warum diese Felder existieren, weil ich sie nicht explizit im Web PLSQL Code erstellt habe. Aber ich verstehe jetzt, dass die Zielprozedur sie als Parameter enthalten muss, um korrekt zu funktionieren. Auch dies ist nur für den Fall von IE6 für mich, wie Firefox gut funktioniert.

Nun, dass die kurzfristige Antwort und hack es zu beheben. Hoffentlich wird ein bisschen mehr Arbeit in diesem Bereich zu einem besseren Verständnis der Grundlagen führen.

Antwort

4

Erste Anlaufstelle wäre, Fiddler zu starten und die Daten zu analysieren, die zum und vom Browser gehen.

Schauen Sie sich die Header an, die URL wird tatsächlich aufgerufen und die Parameter (falls vorhanden) werden an die AJAX-Methode übergeben und sehen, ob alles gut aussieht, bevor Sie zum Server gelangen.

Wenn das alles in Ordnung aussieht, gibt es eine Möglichkeit zu überprüfen, ob es tatsächlich den Server durch Protokollierung oder Tracing in der AJAX-Methode trifft?

ed: eine andere Sache, die ich versuchen würde, ist eine Testseite riggen, um die AJAX-Methode auf dem Server mit einem nicht-Ajax-basierten Anruf und analysieren den Verkehr in Fiddler und vergleichen Sie die beiden.

+0

Lomaxx: * Fiddler ist für HTTP. * Headers, URLs, Params sind alle gut * Kontaktieren Sie unsere Firmenadministratoren und sehen Sie, ob sie sich wohl fühlen, um die Logs zu sehen –

+0

"Fiddler ist für HTTP." Interessant ... auf der Titelseite heißt es: "Fiddler 2 ersetzt Fiddler 1.x. ** Fiddler 2 unterstützt das Debugging von HTTPS ** Traffic, ein umfangreicheres Erweiterbarkeitsmodell und kann Seite an Seite mit Fiddler 1 installiert werden .x, falls gewünscht. Beachten Sie, dass Fiddler 2 Version 2.0 von .NET Framework benötigt. " Ich denke immer noch, es lohnt sich, es zu feuern :) – lomaxx