2012-05-24 4 views
1

У меня есть функция с этим я хочу, чтобы получить значение из PHP файла:JQuery Ajax, getJSON дает нуль

var phrases = null; 
function setPhrases(lang) { 
    $.getJSON(locationHostname()+'json?json=lang&lang='+lang, 
      function(json) { 
     phrases = json; 
     alert(1 + ' ' + phrases);//phrases = [object Object] 
    }); 
    alert(2 + ' ' + phrases);//phrases = null 
} 
setPhrases('en'); 
alert(3+' '+phrases);//phrases = null 

как правильно установить его, что тревога (3+»«+ фраз); получает объект вместо null? Я хочу использовать функцию, которая, например, возвращает значение из getJSOn.

Спасибо

ответ

2

$.getJSON является асинхронным, поэтому вы получаете неопределенными: alerts выполняются в то время как Ajax вызов все еще работает

Вы можете вызвать функцию события успеха, передавая json в качестве аргумента, например,

function setPhrases(lang) { 
    $.getJSON(locationHostname()+'json?json=lang&lang='+lang, 
     function(json) { 
      continueProcessing(json) 
     } 
    ); 
} 

function continueProcessing(obj) { 
    ... 
} 
+0

Спасибо! Ответ был хорошим. – iff

0

Вы не можете. .getJSON работает асинхронно, и если он молниеносно, то будут выполняться команды alert(2) и alert(3). Вы должны иметь alert(2) и alert(3) как часть функции успеха или использовать Deferred.

EDIT: Я думаю, так как это электронно, возможно, - молнии быстро, и даже этого недостаточно!

0

Я думаю, вы не можете получить phrases в третьем alert() из-за асинхронного поведения $.getJSON().

0

вы должны использовать метод обратного вызова. проблема с вашим методом getJSON заключается в том, что он асинхронный.

пример:

function setPhrases(lang, callback) { 
    $.getJSON(locationHostname()+'json?json=lang&lang='+lang, 
      function(json) { 

     callback(json); 
    }); 
} 

    setPhrases('en',function(result) { 

    alert(result); 

}); 
Смежные вопросы