Multi Ajax requests.

messmar

Erfahrenes Mitglied
Hallo zusammen,

ich habe ein paar (3-4 in der Zahl) Ajax Requests, die ich ausführen möchte, aber eins nach dem Anderen
bzw. erst wenn der eine fertig/durch ist, dann soll der nächste ausgeführt werden.

Code:
Javascript:
switch(x) {
           case 1:
  console.log('CASE 1');
  $.ajax({
  url: 'getxml.jsp',
  data: params,
  dataType: 'xml',
  success: function(data) {
  storeData(data, '1', ${parag.partid}, true);
  console.log('ERSTER REQUEST groupingNo: ' + groupingNo + 'grouping: ' + grouping);
  },
  error: function(jqXHR, status, error) {
  console.log("Error loading product information.", "Error");
  }
  });
  break;
           case 2:
  console.log('CASE 2');
  $.ajax({
  url: 'loaddata/getxml_oneXml.jsp' + sessionID,
  data: params,
  dataType: 'xml',
  success: function(data) {
  storeData(data, '2', ${parag.partid}, true);
  console.log('ZWEITER REQUEST groupingNo: ' + groupingNo + 'grouping: ' + grouping);
  },
  error: function(jqXHR, status, error) {
  console.log("Error loading product information.", "Error");
  }
  });
  break;
           default:
           break
         }

Ich habe einiges bis vieles ausporbiert, aber es scheint nicht zu funtkionieren...

Irgendeine Idee bitte?

Vielen Dank
Messmar
 
Genau, das ist ein perfekter Anwendungsfall für sogenannte "Promises". Das "deferred object" von jQuery ist da ziemlich ähnlich strukturiert.
 
Hallo zusammen,

ich mache einfach hier weiter, damit es nicht zu doppeltem Eintrag/Posting kommt.

Ich versuche jetzt bei einem anderen Prozess die folgenden zwei Ajax-Requests auszuführen:

Javascript:
  var url_1 = "webDomain/rolesearch.jsp?mail=xxxx@xxx.de&gr=5";
  var url_2 = "webDomain/rolesearch.jsp?mail=yyyy@yyy.de&gr=6";

  var dfd = $.Deferred();
  $.getJSON(url_1, function(data){
  console.log("First ajax done: " + data.member + ' ' + data.role);
  $.getJSON(url_2, function(data){
  console.log("Second ajax done: " + data.member + ' ' + data.role);
  dfd.resolve();
  });
  });

  return dfd.promise();

es funkt. leider nicht ganz, da ich über die console.log nichts erhalte bzw. die zwei First und Second
Ajax Strings nicht ausgegeben werden.

Wenn ich aber statt:
Javascript:
$.getJSON(....
den
Javascript:
$.get(...
oder
Javascript:
$.post(...
dann erhalte ich undefined für data.xxxx:

First ajax done: undefined undefined und: Second ajax done: undefined undefined obgleich ich den Response über
die console das richtige Ergebnis bekomme:

Code:
{
"member": true, "role": owner
}

Gibt es irgednwelche Beschränkungen oder Ähnliches was Deffred in Kombination mit $.getJSON/$.get/$.post angeht?

Vielen Dank!
Messmar
 
Hallo zusammen,

ich hätte es beinah übersehen/vergessen.

FYI: der Bug ist gefixt und da es von der allgemeinen Interesse ist/sei, hierbei die kurze Erklärung.

Die Seite, wo der Ajax repsonse zurückgeschickt und erwartet wird, ist eingenlich via: include eingebettet und die Main-Seite
hat als contentType: "text/html"
Code:
<%@ page contentType="text/html; charset=UTF-8" %>
.

Mein Ajax Request (getJSON) sagt, dass es ein JSON erwartet:
Code:
<%@ page contentType="application/json; charset=UTF-8" %>
wird, so zusagen, was eigentlich nicht zum: contentType, wo die Datei, die den Response abfängt, nicht passt.

Meine Lösung sieht dann so aus:

Javascript:
var dfd = $.Deferred();
  $.ajax({
  type: "GET",
  url:ul,
  async: true,
  dataType: "html",
  success: function( data ) {
  addOpt(data, '.memAndRole', lng, lang);
  }
  });
  return dfd.promise();

addOpt-Funkion is eine Helf-Funktion, die ich beim Success aufrufe. Wie man sieht, habe ich die Methode getJSON(..) entfernt und durch
die: ajax({...}) ersetzt und den
Code:
dataType
als: "html" definiert. Es funkt. damit.

Falls ich da trotztdem, an die eine oder andere Stelle, was nicht ganz richtig schreibe/erwähne, würde ich mich über Korrekturen freuen.

Danke
Messmar
 

Neue Beiträge

Zurück