我有一個VB .net應用程序,我試圖與以前的deverlopers代碼集成。 該代碼需要一個郵政編碼並返回商店列表以及其在Google地圖畫布上的位置。vb .net,涉及嚴格模式的javascript問題
該過程很好,只有一個例外。
我收到以下錯誤
JavaScript runtime error: Accessing the 'caller' property of a function or arguments object is not allowed in strict mode.
我已經分離出的罪魁禍首
__doPostBack('userControlSearchResults_results', LatLng);
內部具有以下
function Sys$WebForms$PageRequestManager$_doPostBack(eventTarget, eventArgument) {
var event = window.event;
if (!event) {
var caller = arguments.callee ? arguments.callee.caller : null;
if (caller) {
var recursionLimit = 30;
while (caller.arguments.callee.caller && --recursionLimit) {
caller = caller.arguments.callee.caller; // ERRORS HERE
}
event = (recursionLimit && caller.arguments.length) ? caller.arguments[0] : null;
}
}
...
我的第一個傾向是創建一個窗口。事件,所以它通過if(!event)並繼續前進。 因爲,還有些時候我們在代碼中調用了__doPostback並且它是成功的。
但是由於我的JavaScript是有限的,我要麼做錯了,要麼需要找到一種不同的方法。
我已經搜索了這個問題,很少回來。普遍的迴應是隻評論'嚴格使用';並繼續前進。
問題是,我們拉了很多JavaScript庫,其中許多人現在都設置爲「使用嚴格的」
有沒有人有一個建議,或者對如何解決這個問題的想法?
博客引用了試圖在__doPostback調用之前應用setTimeout()。 但是我不明白這將如何解決任何問題。
編輯:增加了一些代碼。
__doPostBack是下面的JavaScript
function CompleteSearch(returnedLatLng) {
if (returnedLatLng != '') {
alert("dopostback here2- this is where it breaks");
__doPostBack('ucSearchResults_udpResults', returnedLatLng);
if (document.getElementById("sidebar_search")) { document.getElementById("sidebar_search").style.display = "none" };
if (document.getElementById("sidebar_login")) { document.getElementById("sidebar_login").style.display = "none" };
if (document.getElementById("promo1")) { document.getElementById("promo1").style.display = "none" };
document.getElementById("sidebar_results").style.display = "block";
//document.getElementById("sidebar_results").style.display = "none";
}
return false;
}
內凡爲我的更新面板是一個用戶控件中,看起來像這樣...
<form id="Form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div id="Container" style="zoom:1" onclick="">
<asp:UpdatePanel runat="server" ID="udpResults" OnLoad="UpdatePanel1_Load">
<ContentTemplate>
<asp:HiddenField ID="currentLatLong" runat="server" />
<asp:HiddenField ID="triggerSearch" runat="server" Value="0" />
<asp:HiddenField ID="searchString" runat="server" Value="0" />
<asp:HiddenField ID="locationCode" runat="server" />
<asp:HiddenField ID="locationDesc" runat="server" />
<asp:HiddenField ID="locationPhone" runat="server" />
<asp:HiddenField ID="locationZip" runat="server" />
<asp:HiddenField ID="filterPickup" runat="server" />
<asp:HiddenField ID="filterVirtualKiosk" runat="server" />
<asp:HiddenField ID="filterDelivery" runat="server" />
<asp:HiddenField ID="filterAcceptsCash" runat="server" />
<asp:HiddenField ID="filterKey2Key" runat="server" />
<asp:HiddenField ID="filterHODService" runat="server" />
<asp:Label ID="tblResults" runat="server"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
這是否幫助或將更多需要的代碼。 我現在真的被卡住了,不知道該怎麼辦。
我不認爲這個__doPostBack JavaScript代碼是由任何開發人員完成的,我認爲它是ASP引擎生成它的。我認爲你應該發佈ASP代碼,也許這些userControlSearchResults_results功能。 – xavigonza
你是對的,Sys $ Web ...是由引擎生成的。然而,「caller = caller.arguments.callee.caller」行是錯誤的原因。該代碼適用於較舊的經典ASP網站。我正在嘗試與新網站進行整合。我將回顧__doPostBack過程。 –