【问题标题】:$.getJSON will not run function after data is returned$.getJSON 数据返回后不会运行函数
【发布时间】: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


【解决方案1】:

我认为你错过了这一行:

document.body.appendChild(hiddenField);

【讨论】:

  • PS - 可能想通过submit 点击函数传递event.on('click', function(event) { ... });
猜你喜欢
  • 1970-01-01
  • 2011-10-03
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多