Javascript $(';';+;postFormId).html(xml)引发对方法错误的意外调用

Javascript $(';';+;postFormId).html(xml)引发对方法错误的意外调用,javascript,jquery,xml,netsuite,Javascript,Jquery,Xml,Netsuite,编辑:我试过jquery版本1.11.3和1.4.2 以下代码在模拟早期版本的ie(5和7)时抛出错误“对方法或属性访问的意外调用”。使用此仿真不是可选的,因为它是由第三方设置的。它在IE8中运行良好,并且有一个版本基本上与在5和7中使用的代码相同(我复制并粘贴了它,并做了一些更改) 使用console.logs,我相当肯定问题出在$('#'+postFormId).html(xml)中,尽管我可能错了 if( punchOutCartPage != "SalesOrder" ) { $

编辑:我试过jquery版本1.11.3和1.4.2

以下代码在模拟早期版本的ie(5和7)时抛出错误“对方法或属性访问的意外调用”。使用此仿真不是可选的,因为它是由第三方设置的。它在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;');
}
if(punchOutCartPage!=“销售订单”){
$(文档)。在('单击','btn继续签出',函数()上){
var itemsXML=parseShoppingCart();
var headerXML=“\t\n\t\t{sellerId}\n\t\t{buyerID}\n\t\t{sessionId}\n\t”;
var shoppingCartXML=createNetSuiteShoppingCart(headerXML,itemsXML);
变量形式=$(“#购物车”);
var form_action=form.attr(“action”);
$.ajax({
url:“/app/site/backend/emptycart.nl?c=”,
上下文:document.body,
成功:功能(数据){
var form_serialized=form.serialize();
$.post(表单动作、表单序列化、,
功能(val){
postToPunchOutUrl(punchOutUserCartUrl、shoppingCartXML);
}
);
}
});
返回false;
});
} 
函数parseShoppingCart(){
}
函数createNetSuiteShoppingCart(headerXML,itemsXML){
var parentCompany=localStorage.StrparentCompany;
var account=localStorage.Straccount;
var sessionId=localStorage.strpuncoutsessionid;
headerXML=headerXML.replace(“{sellerId}”,“+encodeXML(account)+”);
headerXML=headerXML.replace(“{buyerID}”,“+encodeXML(parentCompany)+”);
headerXML=headerXML.replace(“{sessionId}”,“+encodeXML(sessionId)+”);
itemsXML=“\n”+headerXML+”\n“+”\n“+fezzik+”\n“+”;
itemsXML=encodeXML(itemsXML);
var shoppingCartXML='';
return shoppingCartXML.replace(“{url编码的原始xml}”,itemsXML);
}
函数postToPunchOutUrl(url,xml){
var postFormId=“poomform”;
$('#'+postFormId).html(xml);
$('#'+postFormId).attr(“action”,url);
document.forms[postFormId].submit();
}
函数编码XML(字符串){
返回字符串.replace(//\&/g,&'+'amp;')。replace(//g,&'+'gt;')。replace(//\'/g,&'+'apos;')。replace(//\'/g,&'+'quot;');
}

此问题是由文档模式模拟本身引起的。当internet explorer模拟文档模式5或7时,在某些情况下,它会在表单周围包装一个表单标记。因此此
变成了(我没有复制它,但大致是这样)


然后抛出对方法错误的意外调用

我通过在页面加载后使用javascript添加表单来解决这个问题,因此我将html中的表单替换为

然后在我的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);
函数postToPunchOutUrl(url,xml){
$(“#”+“poomformholder”).html(“”);
//我们表单的id名称。
var postFormId=“poomform”;
$('#'+postFormId).attr(“action”,url);
$('#'+postFormId).html(xml);

现在一切都正常了。希望这会对将来的人有所帮助,谢谢你的帮助!

分享你的JSFIDLE短代码版本。什么版本的jQuery?如果你要支持IE5-8,你必须使用一个非常旧的版本,然后你会与IE9-11和edge以及其他一些现代的browsers。即使是Microsoft也不再支持这些版本的IE。正如Kevin所说,尝试使用jquery并用相同的代码支持所有版本的IE都不会有什么乐趣。你可能希望使用条件注释,并使用老式的DOM javascript来支持旧版IE。相信我,如果用户的浏览器如果在我的控制下,它将在一秒钟内实现现代化。由于浏览器版本的原因,存在大量问题(是的,我必须同时支持现代版和旧版),但就目前而言,这是一个我无法解决的问题,这真的需要修复。
punchOutUserCartUrl
来自哪里?
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);