Mam dane w moim ajax.done i błędów na jQuery. Idę na to i nie mogę nic znaleźć.

Co robić?

function select_aragement(arragament){
  var arrst = arragament;
  var arrsplit = arrst.split("|");
  var periode = arrsplit[0];
  var id = arrsplit[1];
  var postsjson;
  var test= $.ajax({ 
    type: 'POST',
    async: true,
    url: 'ajax/prijzen.php',
    data: { id: id, periode: periode },
    dataType: 'json'
  }).done(function (vis) {
    console.log(vis);
    postsjson = $.parseJSON(vis);
  });
  return  postsjson;
}
1
Bart Klaster 25 listopad 2013, 17:06

3 odpowiedzi

Możesz przenieść linię powrotną w sekcji Gotowe

}).done(function (vis) {
     console.log(vis);
     postsjson = $.parseJSON(vis);
     return  postsjson;
});

Ale pamiętaj, że będąc asynchronicznym połączeniem, więc będzie twoim powrotem. Moim doradzaniem będzie przejść w wywołaniu zwrotnym.

function select_aragement(arragament, callback){
    var arrst = arragament;
    var arrsplit = arrst.split("|");
    var periode = arrsplit[0];
    var id = arrsplit[1];
    var postsjson;
    var test= $.ajax({ 
         type: 'POST',
         async: true,
         url: 'ajax/prijzen.php',
         data: { id: id, periode: periode },
         dataType: 'json'
     });
   test.done(function (vis) {
      console.log(vis);
     postsjson = $.parseJSON(vis);
     callback && callback(postjson);
    });
}

I zmodyfikuj kod, aby użyć wywołania zwrotnego zamiast zwracanej wartości.

Przed

var postjson=select_aragement(arragament);
...stuff with postjson...

Po

 select_aragement(arragament, function(postjson) {
    ...stuff with postjson...
});
0
ffflabs 25 listopad 2013, 13:09

Próbujesz wykonać ogień AJAX Call Synchronicznie, ponieważ trzeba dokonać właściwości AsynC.

async: false,
0
Swifty 25 listopad 2013, 13:12

Problem:

Spójrz na następujący kod:

function getValue(){
    var value = 0;
    setTimeout(function(){
        value = 42;
    }, 1000);

    return value;
}

Jaka jest zwracana wartość?

skrzypce

To jest twój dokładny problem z

 function select_aragement(arragament){
      var postjson;
      $.ajax(...).done(function(vis){ 
         postjson = vis;
      });

      return postjson;
 }

Rozwiązanie:

Wyobrażam sobie, że używasz swojej funkcji w następujący sposób:

var data = select_aragement(arragament);
// do something with data :
$.each(data, function(){
    ....
});

Możesz zmienić kod select_aragement taki kod:

function select_aragement(arragament){
  var arrst = arragament;
  var arrsplit = arrst.split("|");
  var periode = arrsplit[0];
  var id = arrsplit[1];
  var test = $.ajax({ 
      type: 'POST',
      async: true,
      url: 'ajax/prijzen.php',
      data: { id: id, periode: periode },
     dataType: 'json'
  });
  // return the promise which wraps the ajax call
  return test;
}

I kod wywołania:

// "p" stands for "promise"
var p = function select_aragement(arragament);
p.done(function(data){
    // do something with data :
    $.each(data, function(){
        ....
    });
});

Lub bez zmiennej lokalnej:

select_aragement(arragament).done(function(data){
    // do something with data :
    $.each(data, function(){
        ....
    });
});
0
LeGEC 25 listopad 2013, 13:54