2016-08-15 204 views
-1

目前我正在开发一个Ruby on Rails应用程序,并且试图让下面的JS与该应用程序一起工作。我遇到的第一个问题是turbolinks 5.0阻止了页面在初始加载时加载JS,为了加载下面的JS,我必须刷新页面。我做了一些Google搜索,并遇到this stackoverflow answer,但我似乎无法让JS正常运行而不会抛出错误。任何和所有的帮助将不胜感激。Javascript类型错误:变量未定义

orders.js

console.log('inside orders.js'); 

$(document).on('turbolinks:load', function() { 
// Your JS here 
var payment; 

jQuery(function() { 
    Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content')); 
    return payment.setupForm(); 
}); 

payment = { 
    setupForm: function() { 
    return $('#new_order').submit(function() { 
     $('input[type=submit]').attr('disabled', true); 
     Stripe.card.createToken($('#new_order'), payment.handleStripeResponse); 
     return false; 
    }); 
    }, 
    handleStripeResponse: function(status, response) { 
    if (status === 200) { 

     // return alert(response.id); 
     $('#new_order').append($('<input type="hidden" name="stripeToken" />').val(response.id)); 
     return $('#new_order')[0].submit(); 

    } else { 

     // return alert(response.error.message); 
     return $('#stripe_error').text(response.error.message).show(); 

    } 
    } 
}; 
}); 
+0

' “没有出现任何的错误”“ - 有什么错误?哪一行会引发错误?发生这种情况时的运行时间值是什么? – David

+0

Jquery(function(){return“sth”});是无稽之谈 –

+1

没有很多细节我会说这是因为你正在用'$'准备好jQuery,然后再次检查jQuery是否已经准备好了'jQuery',基本上调用两次不同的值准备好'$'vs' jQuery' –

回答

0

正如上面提到的评论,该问题涉及到了jQuery声明坐落在JS。我将JS重构为如下所示,现在一切似乎都奏效了。

orders.js

console.log('inside orders.js'); 

$(document).on('turbolinks:load', function() { 
// Your JS here 
var payment; 

payment = { 
    setupForm: function() { 
    return $('#new_order').submit(function() { 
     $('input[type=submit]').attr('disabled', true); 
     Stripe.card.createToken($('#new_order'), payment.handleStripeResponse); 
     return false; 
    }); 
    }, 

    handleStripeResponse: function(status, response) { 
    if (status === 200) { 

     // return alert(response.id); 
     $('#new_order').append($('<input type="hidden" name="stripeToken" />').val(response.id)); 
     return $('#new_order')[0].submit(); 

    } else { 

     // return alert(response.error.message); 
     return $('#stripe_error').text(response.error.message).show(); 

    } 
    } 
}; 

jQuery(function() { 
    Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content')); 
    return payment.setupForm(); 
}); 
});