编辑:我已经尝试过jquery版本1.11.3和1.4.2
以下代码抛出错误"对方法或属性访问的意外调用"在模拟先前版本的ie(5和7)时。使用此仿真不是可选的,因为它由第三方IT设置。它在IE8中运行良好,并且有一个版本基本上是相同的代码(我复制并粘贴它,并进行了一些更改)用于在5和7中工作。
使用console.logs,我相当肯定问题出在$('#' + postFormId).html(xml)中,尽管我可能错了。
if( punchOutCartPage != "SalesOrder" ) {
$(document).on('click','#btn-proceed-checkout',function(){
var itemsXML = parseShoppingCart();
var headerXML = "\t<header>\n\t\t{sellerId}\n\t\t{buyerID}\n\t\t{sessionId}\n\t</header>";
var shoppingCartXML = createNetSuiteShoppingCart( headerXML, itemsXML );
var form = $("#cart");
var form_action = form.attr("action");
$.ajax({
url:'/app/site/backend/emptycart.nl?c=',
context: document.body,
success: function(data){
var form_serialized = form.serialize();
$.post(form_action, form_serialized,
function (val) {
postToPunchOutUrl(punchOutUserCartUrl, shoppingCartXML);
}
);
}
});
return false;
});
}
function parseShoppingCart() {
}
function createNetSuiteShoppingCart( headerXML, itemsXML ) {
var parentCompany =localStorage.StrparentCompany;
var account =localStorage.Straccount;
var sessionId = localStorage.StrpunchOutSessionId;
headerXML = headerXML.replace("{sellerId}", "<sellerID>" + encodeXML(account) + "</sellerID>");
headerXML = headerXML.replace("{buyerID}", "<buyerID>" + encodeXML(parentCompany) + "</buyerID>");
headerXML = headerXML.replace("{sessionId}", "<PunchOutSessionID>" + encodeXML(sessionId) + "</PunchOutSessionID>");
itemsXML = "<NetSuiteSellerPunchOutShoppingCart>\n" + headerXML + "\n" + "<itemList>\n" + fezzik + "</itemList>\n" + "</NetSuiteSellerPunchOutShoppingCart>";
itemsXML = encodeXML(itemsXML);
var shoppingCartXML = '<input type="hidden" name="shoppingcart-urlencoded" value="{url-encoded-raw-xml}">';
return shoppingCartXML.replace("{url-encoded-raw-xml}", itemsXML);
}
function postToPunchOutUrl( url, xml ) {
var postFormId = "poomform";
$('#' + postFormId ).html( xml );
$('#' + postFormId ).attr( "action", url );
document.forms[postFormId].submit();
}
function encodeXML(string) {
return string.replace(/\&/g, '&' + 'amp;').replace(/</g, '&' + 'lt;').replace(/>/g, '&' + 'gt;').replace(/\'/g, '&' + 'apos;').replace(/\"/g, '&' + 'quot;');
}
答案 0 :(得分:0)
此问题是由文档模式模拟本身引起的。当Internet Explorer模拟文档模式5或7时,它会在某些情况下在表单周围包装表单标记。所以这<form method="POST" name="poomform" id="poomform" action="https://www.example.net"></form>
成了(我没有复制它,但大约是)
<form><form method="POST" name="poomform" id="poomform" action="https://www.example.net"></form></form>
然后会抛出意外调用方法错误。
我通过在页面加载后使用javascript添加表单来解决这个问题,所以我用h <div id="poomformholder"></div>
然后在我的postToPunchOutUrl函数中添加了一行jquery,如下所示:
function postToPunchOutUrl( url, xml ) {
$('#' + "poomformholder" ).html("<form method=\"POST\" name=\"poomform\" id=\"poomform\" action=\"https://www.example.net\"></form>");
//The id name of our form.
var postFormId = "poomform";
$('#' + postFormId ).attr("action",url);
$('#' + postFormId ).html(xml);
现在一切正常。希望这有助于将来的某些人,并感谢您的帮助!