2009-08-04 105 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; 
      }); 
    }; 

如何將值返回給調用者值? 謝謝。jQuery getJSON - 返回給調用者函數的值

編輯:我已經試過這樣:

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; 
    }; 

但它不工作要麼。它返回null。

回答

6

我假設你想使用同步事件,以便你的String.prototype.getLanguage()函數將只返回JSON。不幸的是,你不能用jQuery從遠程API那裏做到這一點。

據我所知,jQuery不支持synchronous XMLHttpRequest objects,即使這樣做,您需要在服務器上有一個代理來發出同步請求,同時避免same-origin policy的限制。

但是,您可以使用jQuery對JSONP的支持來做你想要的。 如果我們只是寫String.prototype.getLanguage()支持回調:

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); 
    }); 
} 

然後我們可以使用的功能,例如:

'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

謝謝,這是一個好主意。 – 2009-08-04 21:29:37

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); 
};