/ / XDomainRequest onLoad wird nicht korrekt in IE8 ausgelöst - ajax, google-maps, Internet-Explorer-8, xdomainrequest, xdr

XDomainRequest onLoad wird nicht korrekt in IE8 ausgelöst - ajax, google-maps, internet-explorer-8, xdomainrequest, xdr

Ich feuere eine Anfrage an den Google-Geocode-API ab, um den Längen- und Breitengrad einer Postleitzahl zu ermitteln. Dies funktioniert gut in allen Browserleisten IE8 (Schock!).

Um dies zu umgehen, habe ich XDomainRequest für IE implementiert.

  /*
Convert postcode to lat/lng.
*/

var convertPostcodeToLatLng = function(postcode) {
var isPostcodeValid = false,
postcodeRegex = /[A-Z]{1,2}[0-9][0-9A-Z]?s?[0-9][A-Z]{2}/gi,
lat,
lng;

if (window.XDomainRequest) {
// Use Microsoft XDR
var xdr = new XDomainRequest();

xdr.onload = function() {

response = JSON.parse(xdr.responseText);

if (postcode.match(postcodeRegex) && response.status === "OK") {
lat = response.results[0].geometry.location.lat;
lng = response.results[0].geometry.location.lng;

isPostcodeValid = true;
}
}

} else {

$.ajax({
url: "//maps.googleapis.com/maps/api/geocode/json?address=" + postcode + ",+UK&sensor=false",
type: "get",
dataType: "json",
cache: false,
async: false,
success: function(response) {

window.console && console.log(response);

if (postcode.match(postcodeRegex) && response.status === "OK") {
lat = response.results[0].geometry.location.lat;
lng = response.results[0].geometry.location.lng;

isPostcodeValid = true;
}

},
error: function(response) {
// error
}
});

}

if (!isPostcodeValid) return ["error", "Please enter a valid postcode"];

return [lat, lng];
}

und hier nenne ich es

applicantPostcode = fm.find("input[name=postcode]").val(),
applicantPostcodeCoords = convertPostcodeToLatLng(applicantPostcode);

Ich prüfe auch auf Fehler, bevor ich fortfahre

if (applicantPostcodeCoords[0] === "error") {
$("#sb-player #postcode").after("<label class="invalid-postcode">" + applicantPostcodeCoords[1] + "</label>");

return;
}

Jetzt sage ich, es funktioniert nicht, das ist eine Lüge, es funktioniert, es funktioniert einfach nicht sofort, so dass der Fehler ausgelöst wird, wenn es nicht sein sollte.

Ich habe das Debuggen in IE8 ausprobiert und scheint das zu tun

  • Postleitzahl aus Formularelement abrufen
  • zur Funktion mit der Postleitzahl springen
  • Erstellen Sie neue XDomainRequuest
  • über xdr.onload springen
  • Neue XDomainRequest erstellen
  • springt aus der Bedingung und runter zu isPostcodeValid und gibt den Fehler zurück

Jetzt funktioniert die Anfrage, ich habe sie getestet, das Problem ist, dass sie nicht sofort funktioniert und daher in den Fehler springt.

Hat jemand eine Einsicht, warum es über die Last hinaus springt und nicht hinein?

Vielen Dank!

Antworten:

0 für die Antwort № 1

Sobald Ihre Funktion geladen wird, geht sie in den ersten Zustand und schlägt fehl

   if (postcode.match(postcodeRegex) && response.status === "OK") {
lat = response.results[0].geometry.location.lat;
lng = response.results[0].geometry.location.lng;

isPostcodeValid = true;
}

da gibt es keine Antwort wie haben Sie an dieser Stelle noch keine Anfrage gesendet?

Wenn Sie dies beim ersten Durchlauf der Funktion treffen, wird die if (!isPostcodeValid) return ["error", "Please enter a valid postcode"];