gpt4 book ai didi

jQuery(跨域).getJSON,将响应存储在可重用变量中

转载 作者:行者123 更新时间:2023-12-01 07:34:03 25 4
gpt4 key购买 nike

我想从当前用户获取IP,并将其与AJAX POST一起发送到PHP文件。这意味着我需要重新使用从 IP .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);

据我所知,不在变量前面声明'var'关键字使其可用于所有作用域,甚至在函数(全局)之外。虽然我猜如果脚本2可能不是跨域请求,那么它应该可以工作,但在这种情况下,它会给出一个带有'未定义'的警报对话框 所以这个例子不会工作

在 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 相同的问题,即'undefined'

问题:如何在以后的脚本中重复使用此变量?

编辑尼克·克拉弗斯的答案

var ipAppspot;
$.getJSON("http://jsonip.appspot.com?callback=?",function(data){
ipAppspot = data.ip;
myFunc();
});
function myFunc() {
alert(ipAppspot);
}

作者:Nick Craver,这确实有效。

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,稍后我需要 AJAX 请求的 IP,有什么方法可以实现它吗?

最佳答案

这不是范围问题,而是时间问题,让我们用一个确实有效的示例来说明它,如下所示:

var ipAppspot;
$.getJSON("http://jsonip.appspot.com?callback=?",function(data){
ipAppspot = data.ip;
myFunc();
});
function myFunc() {
alert(ipAppspot);
}

You can test it here 。请注意,它确实会提醒您的 IP,那么这里有什么不同呢?在填充变量之前,您不会请求变量(通过调用 alert()),这发生在 $.getJSON() 中。打回来。因此范围不是问题,但事实上回调运行稍后(当响应返回时)是一个问题,只需启动需要来自回调,因为这是数据第一次可用。

这是一个更常见的示例,将数据直接传递到它所在的地方:

$.getJSON("http://jsonip.appspot.com?callback=?",function(data){
myFunc(data.ip);
});
function myFunc(ipAppspot) {
alert(ipAppspot);
}

或者,简短版本:

$.getJSON("http://jsonip.appspot.com?callback=?", myFunc);
function myFunc(ipAppspot) {
alert(ipAppspot);
}

关于jQuery(跨域).getJSON,将响应存储在可重用变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3858215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com