$scope.updateCart = function() {
item = $scope.productData;
此代码段在IE 11中返回一个函数,而不是像在chrome上那样返回对象
导致以下$ http请求发送乱码数据。
使用https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js
上一个标题:IE 11 jquery'Argument not optional'错误
以下代码:
dt = $.param({
shopid: shop_id,
mtd: method,
item: item
});
抛出以下错误:
TypeError: Argument not optional
at add (https://code.jquery.com/jquery-1.9.1.js:7340:4)
at buildParams (https://code.jquery.com/jquery-1.9.1.js:7392:3)
at jQuery.param (https://code.jquery.com/jquery-1.9.1.js:7360:4)
at $scope.updateBACart (http://127.0.0.1:6636/js/baCartNg.js?v=1478430971:104:3)
at fn (Function code:2:216)
at expensiveCheckFn (http://code.angularjs.org/1.5.5/angular.js:15485:11)
at callback (http://code.angularjs.org/1.5.5/angular.js:25018:17)
at Scope.prototype.$eval (http://code.angularjs.org/1.5.5/angular.js:17229:9)
at Scope.prototype.$apply (http://code.angularjs.org/1.5.5/angular.js:17329:13)
at Anonymous function (http://code.angularjs.org/1.5.5/angular.js:25023:17)
错误在IE 11中引发但在chrome
中没有引发根据https://docs.angularjs.org/api/ng/service/ $ httpParamSerializerJQLike
我更改了代码:
dt = $httpParamSerializerJQLike({
shopid: shop_id,
mtd: method,
item: item
});
现在代码不会抛出错误,但请求是
item: %0Afunction+item()+%7B%0A++++%5Bnative+code%5D%0A%7D%0A
mtd: add
shopid: 1
而不是商品数据。
答案 0 :(得分:1)
当然,您可以将变量item1
命名为item
,而不是function () {
item = (2 + 2); // or some other value
}
,现在可以使用...但是这并没有告诉您有关的信息。错误与您的原始代码。
真正的问题是您要分配全局变量而不是局部变量。当你使用:
var item
之前未使用item
,您实际上正在分配全局变量window
。在浏览器上下文中,全局范围是function () {
window.item = (2 + 2);
}
对象,因此上述内容等同于:
window.item
在Chrome中,没有问题:最初没有window
,因此这项任务会创建它。但是,在IE11中,item
已经具有item
属性,并且只读!这意味着全局window.item
变量的所有赋值都会被忽略,因此function () {
var item = (2 + 2); // does NOT create a global item variable
}
始终具有其原始函数值。
您的解决方案"通过使用不同的变量名来解决这个问题。更好,更强大,更有效的解决方案是使用本地范围的变量:
var
作为一种好的做法,请确保在声明新变量时总是使用"use strict"
,以避免意外创建全局变量。更好的是,向您的函数添加window
指令,以便这些类型的赋值抛出错误而不是默默地忽略错误。
如果确实需要创建全局变量,请明确指定function () {
window.globalItem = (2 + 2);
}
对象本身的属性:
scipy.stats.multivariate_normal
答案 1 :(得分:0)
解决方案是item1 = $scope.productData;
而不是item = $scope.productData;
出于某种原因,IE11将item
设置为function item() { [native code] }