2009-08-04 29 views
5
String.prototype.getLanguage = function() { 
     $.getJSON('http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=' + this + '&callback=?', 
      function(json) { 
       return json.responseData.language; 
      }); 
    }; 

Değeri, arayan değerine nasıl geri döndürebilirim? Teşekkürler.jQuery getJSON - Arayanın işlevine dönüş değeri

DÜZENLEME:

String.prototype.getLanguage = function() { 
     var returnValue = null; 

     $.getJSON('http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=' + this + '&callback=?', 
      function(json) { 
       returnValue = json.responseData.language; 
      }); 

     return returnValue; 
    }; 

Ama da çalışmıyor: Bu denedim. Null değerini döndürür.

cevap

6

ben size String.prototype.getLanguage() fonksiyonu sadece JSON dönecektir böylece eşzamanlı bir olay kullanmak istiyorum tahmin ediyorum. Maalesef bunu uzak bir API'dan jQuery ile yapamazsınız.

Bildiğim kadarıyla jQuery, synchronous XMLHttpRequest objects'u desteklemiyorsa ve bu olsa bile, same-origin policy kısıtlamalarından kaçınarak eşitleme isteğini yapmak için sunucunuzda bir proxy kullanmanız gerekir.

jQuery'nin JSONP desteğini kullanarak istediğinizi yapabilirsiniz.

String.prototype.getLanguage = function(callback) { 
    var thisObj = this; 
    var url = 'http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=' + this + '&callback=?'; 

    $.getJSON(url,function(json) { 
       callback.call(thisObj,json.responseData.language); 
    }); 
} 

Sonra gibi işlevini kullanabilirsiniz: biz sadece bir geri arama desteklemek için String.prototype.getLanguage() yazarsanız

'this is my string'.getLanguage(function(language) { 
    //Do what you want with the result here, but keep in mind that it is async! 
    alert(this); 
    alert(language); 
}); 
+0

Teşekkür, bu harika bir fikir. –

1
var test = function(fun) 
{ 

String.prototype.getLanguage = function() { 
     .getJSON('http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=' + this + '&callback=?', 
      function(json) { 
       fun.call(json.responseData.language); 
      }); 
    }; 

}; 

test(retCall); 

var retCall = function(xjson){ 
    alert(xjson); 
};