我使用第三方JS文件与外部API进行交互,在发送之前对数据进行标记。在一个简单的测试页面中,该函数完全正常工作并返回一个令牌。但是,当我尝试在我使用AngularJS的实际应用程序中实现时,它会因错误而失败:"错误:n.replace不是函数"。
这是一个有效的简单测试脚本:
// Click event handler
$('#form-submit').click(function (e) {
e.preventDefault();
$('#response').hide();
var payload = {
api_id: 'abcde123',
var1: $('#var1').val(),
var2: $('#var2').val(),
var3: $('#var3').val(),
var4: $('#var4').val()
};
// Tokenize data
vendorScript.createToken(payload)
.success(onTokenCreated)
.error(onTokenFailed);
});
这是抛出错误的Angular代码:
app = angular.module 'MyApp'
myCtrl = ($scope, $http, $window, $q) ->
myFormParams = ->
api_id: 'abcde123'
var1: $scope.var1
var2: $scope.var2
var3: $scope.var3
var4: $scope.var4
onTokenCreated = (response) ->
# do real transaction here by using the onetime_token
alert("The onetime_token created: " + response.onetime_token)
$scope.checkoutPromise.resolve()
onTokenFailed = (response) ->
# do real transaction here by using the onetime_token
alert("Getting onetime_token failed: " + response.onetime_token)
$scope.checkoutPromise.resolve()
$scope.submitForm = ->
return if $scope.isProcessingOrder
$scope.isProcessingOrder = true
$scope.checkoutPromise = $q.defer()
$scope.checkoutPromise.promise.then ->
$scope.isProcessingOrder = false
vendorScript.createToken(myFormParams())
.success(onTokenCreated)
.error(onTokenFailed);
app.controller 'myCtrl', ['$scope', '$http', '$window', '$q', myCtrl]
所以,我之前已经读过因var不是字符串而引起的var.replace错误(因此没有替换方法);但是,当我调试原始脚本时,有效负载作为对象传递,就像myFormParams()作为对象传递一样。此外,当我对myFormParams()进行字符串化(即" JSON.stringify(myFormParams())")时,标记化功能失败。
一直在敲打我的脑袋;任何帮助/见解将不胜感激!