【发布时间】:2014-01-07 10:44:20
【问题描述】:
我无法让用户 IP 持续到下一个函数,因为每次我调用 $.getJSON 它都会跳过我的函数。我确信返回的 JSON 很好,因为当我运行此处显示的代码时:
<script type="application/javascript">
$.getJSON("http://www.telize.com/jsonip?callback=?",
function(json) {
document.write("My IP address is : ", json.ip);
}
);
</script>
IP 完全按照您的预期写入屏幕。这是我最近的尝试:
<script type="application/javascript">
function verifyRecaptchaAnswer() {
var privateKey = 'privateKey';
var challengeValue = $('#recaptcha_challenge_field').val();
var responseValue = "manual_challenge" ;
var userIP = $('#hiddenField').val();
$.post("http://www.google.com/recaptcha/api/verify",
{ privatekey: privateKey, remoteip: userIP, challenge: challengeValue, response: responseValue },
function(data) {
return data;
}
);
}
$(document).ready(function() {
var hiddenField = document.createElement('input');
hiddenField.setAttribute("name", "ipHolder")
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("id", "hiddenField");
$.getJSON("http://www.telize.com/jsonip?callback=?",
function(json) {
hiddenField.setAttribute("value", json.ip);
}
);
$('#submit').on("click", function(){
event.preventDefault();
verifyRecaptchaAnswer();
});
});
</script>
我已经尝试了function(json){} 块中的所有方法,但都没有奏效。当然,除了网站上显示的示例,http://www.telize.com/,这是发布的第一个代码块。我在找到这个堆栈帖子后找到了这个站点:How to get client IP address using jQuery,看起来是一样的。我什至还没有测试verifyRecaptchaAnswer 功能,但这就是我想要的用户IP。
【问题讨论】:
-
$.getJSON和$.post等函数是异步的。在 HTTP 请求完成之前,回调函数不会运行。 -
return data;在那里毫无用处。除此之外,究竟是什么问题?你是说document.write("My IP address is : ", json.ip);有效,但hiddenField.setAttribute("value", json.ip);无效? -
@FelixKling 代码隐含地期望“隐藏字段”将在“验证”函数运行时填充其值。
-
@Pointy:我知道,但是在单击按钮之前该功能不会运行。很可能这是问题所在,但我只想从 OP 中正确解释问题。
-
@FelixKling 哦,我明白了;当然可以。
标签: javascript jquery