ajax.postJson(
"/foo/GetFoo",
{ fooName: fooName },
function (data) {
},
function (error) { });
};
My Rest api call is GetAsync()
它抛出ajax是未定义的:JavaScript运行时错误:无法获取未定义或空引用的属性"exceptionStart"。进行 ajax 调用的自定义代码如下。API 调用 Getfoo 是使用属性 HttpGet 的 GetAsync 方法。有人可以指出我失败的原因吗
var ajax = {
defaultAjaxTimeout: 600000,
exceptionStart: '<!--',
exceptionEnd: '-->',
postJson: function (url, data, success, error) {
$.ajax(
{
type: "POST",
dateType: "json",
url: url,
data: data,
timeout: ajax.defaultAjaxTimeout,
success: function (result) {
if (success) success(result);
},
error: function (jqXhr, textStatus, errorThrown) {
if (error && jqXhr) {
var responseText = jqXhr.responseText;
var index = responseText.indexOf(ajax.exceptionStart);
if (index > 0) {
var exception = responseText.substr(index + ajax.exceptionStart.length + 1);
index = exception.lastIndexOf(ajax.exceptionEnd);
if (index > 0) {
exception = exception.substr(0, index);
}
error(exception);
} else {
error(errorThrown);
}
}
}
});
},
}
您在这里遇到的问题是,您尝试在创建变量之前从闭包访问变量ajax
:
var myVariable = {
myProperty: "Hello",
myFunction: function () {
//... access myVariable.myProperty -> error
}
};
这里有两种选择。更干净的一个,我会使用的那个是这样的:
var ajaxOptions = {
defaultAjaxTimeout: 600000,
exceptionStart: '<!--',
exceptionEnd: '-->'
};
var ajax = {
postJson: function (url, data, success, error) {
... ajaxOptions.exceptionStart.length
}
};
这样做的原因是因为ajaxOptions
已经存在于您声明函数的作用域中ajax.postJson
因此它能够从其闭包中正确引用它。
此选项的变体是这样的:
var ajax = {
defaultAjaxTimeout: 600000,
exceptionStart: '<!--',
exceptionEnd: '-->'
};
ajax.postJson = function (url, data, success, error) {
... ajax.exceptionStart.length
};
这样做的原因是因为ajax
已经声明,并且只是附加到函数的闭包上。
第二个不太干净的选项是将ajax
变量作为window
对象的子变量:
window.ajax = {
defaultAjaxTimeout: 600000,
exceptionStart: '<!--',
exceptionEnd: '-->',
postJson: function (url, data, success, error) {
... window.ajax.exceptionStart.length
}
};
这样做的原因是window
始终存在于所有词汇范围内,因此引用它没有问题。它不太干净的原因是因为它污染了窗口对象,页面上任何位置的任何 JavaScript 都可以访问和更改它,这可能会导致未知行为。我不推荐它,我只是提供它作为一个例子。
以下步骤帮助我解决了类似的问题,我使用了IE11IE 11 中的解决方案可以是:
- 在互联网设置下,选择"兼容性视图设置", 在"添加
- 此网站"中,输入您网站的服务器名称(例如:本地主机(,单击"添加"btn。
- 勾选"在兼容性视图中显示内联网步骤"框。