jQuery $ .when()。then()不适合我

时间:2012-02-02 14:17:48

标签: javascript jquery

$。当().then()对我不起作用时,我做错了什么?在此先感谢您的帮助。我想确保首先加载表单,然后我想在表单中填充<div>以显示Google的重新收回。这是测试:它实际上加载了表单,但警报根本没有弹出。我测试工作我将更改“警报”以调用showRecaptcha函数。

<script type="text/javascript">
$("document").ready(function () {
    function showRecaptcha(element) {
           Recaptcha.create("publick_key_here", element, {
             theme: "red",
             callback: Recaptcha.focus_response_field});
   };

  // load the form
  $.get('../php/formularioDeReserva.html', function (data) {
    $.when($('.subscriptionForm').html(data))
       .then(function(){alert('Then')})
       .fail(function(){alert( 'failed.' )});
    alert('I reached this point.');
  });

})
</script>

Felix 的注意事项:我的测试显示.html(data)未立即完成。在下面的代码中,如果我离开alert('Load was performed.')警报的暂停,请给出一些时间,以便showRecaptcha成功。如果我删除警报则无效。

$.get('../php/formularioDeReserva.html', function (data) {
        $('.subscriptionForm').html(data);
         alert('Load was performed.');
         showRecaptcha('recaptcha_div');
        });

Guiherme 的注意事项:尝试你的建议,在我看来这是一个很好的逻辑思路,但仍然不起作用,我不明白为什么不行。在以下代码中, subcritionForm 显示,但successerrorcomplete警报根本不会弹出。

$.get('../php/formularioDeReserva.html', function (data) {
        $('.subscriptionForm').html(data);
         // alert('Load was performed.');
         // showRecaptcha('recaptcha_div');
    })
    .success(function() { alert("second success"); })
    .error(function() { alert("error"); })
    .complete(function() { alert("complete"); });

注意:什么时候“查看源代码”我意识到Java脚本被包含两次,因为其中一个文件没有正确保存。这解释了警报弹出两次的原因。

2 个答案:

答案 0 :(得分:1)

您需要致电

$.when()

之前的

$.get()

但是,如果它只是一个获取请求,为什么不使用

$.ajax({...}).success(function(data){..}).error(function(){...})...;

   $.get({...})
    .success(function() { alert("second success"); })
    .error(function() { alert("error"); })
    .complete(function() { alert("complete"); });

即便如此,我认为在这种情况下,fail()永远不会被调用。

答案 1 :(得分:0)

我放弃了!!!

我决定将主.html文件重命名为.php并使用php include语句而不是.get

<div class="subscriptionForm"> 
     <?php include("../php/formularioDeReserva.html"); ?>
</div> 

并将jQuery更改为显示recaptcha的简单调用:

$("document").ready(function () {
  function showRecaptcha(element) {
       Recaptcha.create("public key here", element, {
         theme: "red",
         callback: Recaptcha.focus_response_field});
      };

 showRecaptcha('recaptcha_div');

 [..more here..]

});

感谢大家的帮助。

更新:我刚刚意识到,或许我需要创建一个deferral并创建一个promise,但我真的不明白这个概念,最后使用php include很容易。