我想從當前用戶獲得IP並與AJAX POST一起發送到PHP文件。這意味着我需要重新使用來自IP .getJSON請求的響應中獲得的變量。的jQuery(跨域).getJSON,在存儲響應重複使用的變量
腳本1:我發現這個方便的片斷上snipt:
$.getJSON("http://jsonip.appspot.com?callback=?",function(data){
alert("Your ip: " + data.ip);
});
腳本1部作品,並給出你的IP 一個警告對話框。
腳本2:我轉換腳本1成這樣:
var ipAppspot;
$.getJSON("http://jsonip.appspot.com?callback=?",function(data){
ipAppspot = data.ip;
});
alert(ipAppspot);
正如我知道,未聲明「變種」在一個變量的前關鍵字使得avaible到所有範圍甚至功能外(全球)。雖然我想這應該工作,如果腳本2不會是一個跨域請求可能,但在這種情況下,它給出了一個警告對話框,「undifined」那麼這個例子就不會工作,但
對Stackoverflow還有另一個問題jQuery-storing-ajax-response-into-global-variable處理大約相同的問題。
並附加他們給出的解決方案我得到以下。
腳本3:追加從鏈路
// https://stackoverflow.com/questions/905298/jquery-storing-ajax-response-into-global-variable
var ipStore = (function(){
var ipAppspot;
$.getJSON("http://jsonip.appspot.com?callback=?",function(data){ipAppspot = data.ip;});
return {getIp : function()
{
if (ipAppspot) return ipAppspot;
// else show some error that it isn't loaded yet;
}};
})();
alert(ipStore.getIp());
腳本3溶液給出了同樣的問題,因爲腳本2,這是'未定義'
問題:如何在以後的腳本中重新使用這個變量?
編輯尼克Cravers尼克Craver,這確實事實上作品回答
var ipAppspot;
$.getJSON("http://jsonip.appspot.com?callback=?",function(data){
ipAppspot = data.ip;
myFunc();
});
function myFunc() {
alert(ipAppspot);
}
。
function dataAuth(ip){
// collect data from form
var usernameRaw = $('#feg-username').val();
var passwordRaw = $('#feg-password').val();
// phpFile is our back-endgine
var phpFile = 'feg/back-endgine.php';
// construct the JSON in a variable
var dataConstruct = "username=" + usernameRaw + "&password=" + passwordRaw + "&ip=" + ip;
// start the AJAX
$.ajax({
type: "POST",
url: phpFile,
dataType: "json",
data: dataConstruct,
success: function(msg){
alert(msg);
}
});
} // END dataAuth
這是我的申請,我將使用功能,例如:
$('body').delegate('#feg-submit', 'click', function(){
$(this).attr('disabled','disabled');
console.log('submit button clicked');
dataAuth(ipAppspot);
return false
});
所以我會用ipAppspot那裏,我需要的IP爲AJAX請求以後,有什麼辦法可以實現它嗎?