Jquery 将XML字符串解析为XML对象后,不会执行任何操作

Jquery 将XML字符串解析为XML对象后,不会执行任何操作,jquery,xml,ajax,web-services,http,Jquery,Xml,Ajax,Web Services,Http,我有一个表单,单击submit按钮运行一个函数,该函数接收所有表单数据输入,从中创建一个xml字符串,然后将该字符串解析为xml对象,以便将其发送到ASP.NET web服务 以下是我的功能: function postData() { var cb = document.getElementById('paymentList'); var selected_cb = cb.options[cb.selectedIndex].text; v

我有一个表单,单击submit按钮运行一个函数,该函数接收所有表单数据输入,从中创建一个xml字符串,然后将该字符串解析为xml对象,以便将其发送到ASP.NET web服务

以下是我的功能:

function postData()
    {
        var cb = document.getElementById('paymentList');
        var selected_cb = cb.options[cb.selectedIndex].text;
        var pguid = getParameterByName('guid');
        var xmlString = '<string>' +
        addField('approver', $('#approver').val()) +
        addField('companyName', $('#companyName').val()) +
        addField('emailAddress', $('#emailaddress').val()) +
        addField('address1', $('#address1').val()) +
        addField('address2', $('#address2').val()) +
        addField('city', $('#city').val()) +
        addField('province', $('#province').val()) +
        addField('country', $('#country').val()) +
        addField('postalCode', $('#postalcode').val()) +
        addField('phoneNumber', $('#phone').val()) +
        addField('paymentMethod', selected_cb);

        xmlString+='<contractData>';
        $('#table tbody tr:has(img[src="images/checkmark.png"])').each(function() {
          xmlString += '<contract>' + addField('vendorPart', $('td:eq(1)', this).text()) +
                addField('description', $('td:eq(2)', this).text()) +
                addField('price', $('td:eq(3)', this).text()) +
                addField('quantity', $('td:eq(4) input', this).val()) + '</contract>';
    });


        xmlString += '</contractData></string>';

        //var vguid = getParameterByName('guid');
        var properid = 'somedata';

        xmlDoc = $.parseXML( xmlString );
        alert("alert");
        $xml = $( xmlDoc );

    $.ajax({

             type: "POST",
             url: "webserviceurl",
             data: {tnWsGuid:properid, xml: $xml},
             dataType: "xml",
             success: function() {
                //window.location.href = 'somePage.html'
                alert("posted");
             },
             error: function ()
             {
                alert("error");
             }
        });

    }
函数postData()
{
var cb=document.getElementById('paymentList');
var selected_cb=cb.options[cb.selectedIndex].text;
var pguid=getParameterByName('guid');
var xmlString=''+
addField('approver',$('#approver').val())+
addField('companyName',$('#companyName').val())+
addField('emailAddress',$('#emailAddress').val())+
addField('address1',$('#address1').val())+
addField('address2',$('#address2').val())+
addField('city',$('#city').val())+
addField('省',$('省').val())+
addField('country',$('#country').val())+
addField('postalCode',$('#postalCode').val())+
addField('phoneNumber',$('#phone').val())+
addField('paymentMethod',已选择\u cb);
xmlString+='';
$(#表tbody tr:has(img[src=“images/checkmark.png”])。每个(函数(){
xmlString+=''+addField('vendorPart',$('td:eq(1)',this).text())+
addField('description',$('td:eq(2)',this).text())+
addField('price',$('td:eq(3)',this).text())+
addField('quantity',$('td:eq(4)input',this).val())+“”;
});
xmlString+='';
//var vguid=getParameterByName('guid');
var properid='somedata';
xmlDoc=$.parseXML(xmlString);
警报(“警报”);
$xml=$(xmlDoc);
$.ajax({
类型:“POST”,
url:“webserviceurl”,
数据:{tnWsGuid:properid,xml:$xml},
数据类型:“xml”,
成功:函数(){
//window.location.href='somePage.html'
警报(“已发布”);
},
错误:函数()
{
警报(“错误”);
}
});
}
在第33行,警报不会运行,$.parseXML之后的任何内容都不会执行(将警报放在parseXML函数关闭之前)。这意味着它不会向我的web服务发布任何内容。关于为什么将它设置为有效的xml对象之后,什么都不起作用,有什么想法吗

此外,在成功功能中,您会注意到我正在更改页面,这在IE中不起作用,但在Chrome和FireFox中效果很好

** 更新 ** 错误来自XML中输入字段的数据,该数据中插入了&符号……有什么办法让它接受这个错误吗

function addField(name, value) { // Add a single element and value
              return '<' + name + '>' + value + '</' + name + '>';
        }
函数addField(名称、值){//添加单个元素和值
返回“”+值+“”;
}

问题在于,您正在从纯文本生成XML,但没有处理XML的转义语法。最简单的方法是使用转义函数:


然后在
addField
函数中,在
value

上调用此转义函数,按F12并读取控制台,很可能XML对IE.XML5618:非法名称字符不够有效,第1行75个字符不确定该带到哪里…xml中是否有
&
?他们需要逃脱。找出该xml字符串的第75个字符是什么。我将该xml字符串复制并粘贴到网站www.xmlvalization.com,没有发现任何错误,更新上述问题中的数据,以便您也能看到它。
addField
有什么作用?我不太明白……如果可能,您能给我举个例子吗?@Surep:丹发布的链接上有一个理想的例子。因此,在
addField
函数中使用
value.replace('&','&;')
而不是
value
。根据该示例,如果您可能需要其他未编码的实体,则可以链接更多的
replace
方法。