Jeśli jestem poprawny getJSON nie może zwrócić słów, ponieważ jest to metoda asynchroniczna. Jak mogę poprawić następujący element kodu, aby wypełnić tytuł z zmienną zwaną {X1}}, który zawiera dane, które chcę nacisnąć w atrybucie narzędzia {X2}}?

$('.multiselect-container li').not('.filter, .group').tooltip({
    placement: 'right',
    container: 'body',
    title: function () {
        var req = $.getJSON('localfile.json', function(data) {
            var words = data["blarg"]["something"];
        });
        return "content"; // words variable should fit here
    }
});
0
Jym Morrison 13 sierpień 2014, 23:22

2 odpowiedzi

Najlepsza odpowiedź

Umieść utworzenie podpowiedzi wewnątrz funkcji wywołania zwrotnego AJAX

$.getJSON('localfile.json', function(data) {
  var words = data["blarg"]["something"];
  $('.multiselect-container li').not('.filter, .group').tooltip({
    placement: 'right',
    container: 'body',
    title: function () {
      return words; // words variable should fit here
    }
  });
});
3
PitaJ 13 sierpień 2014, 19:27

Myślę, że jednym z rozwiązań jest zadzwonienie do funkcji AJAX synchronicznie. Oto przykład

function getData()
{
        if (window.XMLHttpRequest)
                AJAX=new XMLHttpRequest(); 
            else
                AJAX=new ActiveXObject("Microsoft.XMLHTTP");
            if (AJAX)
            {
                AJAX.open("GET", "localfile.json", false);
                AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                AJAX.send();
                return JSON.parse(AJAX.responseText);                                         
            } 
            else
                return null;
}

Następnie wszystko, co musisz zrobić w swoim kodzie, czy to:

$('.multiselect-container li').not('.filter, .group').tooltip({
    placement: 'right',
    container: 'body',
    title: getData
});
0
Khalid 13 sierpień 2014, 19:29