Marco Lehmann: Dashboard Widget - merkwürdiges http_request-Objekt

Hallo zusammen,

ich probiere mich gerade darin ein AJAX-basiertes Dashboard-Widget zu programmieren. Vielleicht erst einmal der Quelltext:

function performRequest(url, callbackFunction) {

http_request = false;

// Mozilla, Safari, ...
        if (window.XMLHttpRequest) {
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) http_request.overrideMimeType("text/xml");

// IE
  } else if (window.ActiveXObject) {
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

if (!http_request) {
   document.getElementById("searchTerm").value = "XMLHTTP-Error";
            return false;
        }
        http_request.onreadystatechange = callbackFunction;
        http_request.open("GET", url, true);
        http_request.send(null);

}

function alertContent() {

if (http_request.readyState == 4) {
            if (http_request.status == 200) {
    document.getElementById("output").value = http_request.responseText;
            } else {
    document.getElementById("output").value = "AJAX-Error:" + http_request.status;

// check http_request object
    document.getElementById("output").innerHTML = "";
    for (elem in http_request) {
     document.getElementById("output").innerHTML += elem + ": " + http_request[elem] + " - ";
    }

}
        }

}
    ...
    performRequest("http://localhost/widget/search.php?term=" + term, alertContent);
    ...

Das witzige ist, daß der readyState von http_request zwar 4 ist, der status-Wert aber undefined und somit auch responseText und responseXML unbrauchbar, weil null. Wie kommt das? Wenn ich das Widget im Safari teste, dann läuft es einwandfrei?

Danke im Voraus für jede Hilfe.

Marco

  1. Moin!

    ich probiere mich gerade darin ein AJAX-basiertes Dashboard-Widget zu programmieren. Vielleicht erst einmal der Quelltext:

    function performRequest(url, callbackFunction) {

    http_request = false;
            // …

    // IE
      } else if (window.ActiveXObject) {
            // …
      }
    }

      
    Was soll denn die Abfrage für den IE da, Dashboard läuft doch unter Mac OS X mit WebKit (Safari)?  
      
    Viele Grüße,  
    Robert
    
    1. Moin!

      Was soll denn die Abfrage für den IE da, Dashboard läuft doch unter Mac OS X mit WebKit (Safari)?

      Viele Grüße,
      Robert

      Ja okay… das ist ein Überbleibsel des Standard-AJAX-Konstrukts. Das bringt mich ja aber leider bei der Problemlösung nicht weiter.

      Marco

      1. Hallo zusammen,

        ich konnte mein Problem lösen und hoffe, daß ich mit dieser Antwort vielen die aufwendige und nervenaufreibende Suche erspare. In der Info.plist-Datei müssen folgende beiden booleschen Werte mit Yes gesetzt sein:

        AllowFileAccessOutsideOfWidget
        AllowNetworkAccess

        Ansonsten erfolgt der Aufruf ganz normal mit folgendem Code:

        var http_request = null;

        function performRequest(url, callbackFunction) {

        http_request = new XMLHttpRequest();
         http_request.onload = function(e) { callbackFunction(e, http_request); }
         http_request.overrideMimeType("text/xml");
         http_request.open("GET", url);
         http_request.setRequestHeader("Cache-Control", "no-cache");
         http_request.send(null);

        }

        function workWithContent(e, request) {

        http_request = null;
         ...
        }

        ...

        performRequest("http://localhost/someData.php?query=test", workWithContent);

        Marco