2009-08-04 5 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 - Возвращаемое значение функции вызывающего абонента

EDIT: Я попытался это:

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

Спасибо, что это отличная идея. –

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); 
}; 
Смежные вопросы