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);
}
}
}
});
},
}
答案 0 :(得分:0)
您在这里遇到的问题是您在创建之前尝试从闭包中访问变量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都可以访问和更改它,从而可能导致未知行为。我不推荐它,我只是提供它作为一个例子。
答案 1 :(得分:0)
以下步骤帮助我解决了类似问题,我使用IE11 IE 11中的解决方案可以是: