解析XML字符串作为XML对象后没有执行

问题描述:

我有一个表单,点击提交按钮后,将运行一个函数,它接受所有表单数据输入,从中创建一个xml字符串,然后将该字符串解析为一个xml对象所以它可以发送到ASP.NET Web服务。解析XML字符串作为XML对象后没有执行

这里是我的功能:

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"); 
      } 
     }); 

    } 

第33行,警报不运行,任何之后的$ .parseXML不执行(将警报的parseXML功能确实熄灭之前)。这意味着它不会向我的网络服务发布任何内容。任何关于为什么将这个设置为一个有效的xml对象后的想法之后没有任何工作?

此外,在成功功能,你会注意到我正在改变页面,这不适用于IE浏览器,但工作在Chrome和FireFox罚款。

** 更新 ** 错误是,其中有&符号插入它的XML输入一个字段的数据来了...就使其接受任何想法?

function addField(name, value) { // Add a single element and value 
       return '<' + name + '>' + value + '</' + name + '>'; 
     } 
+0

按F12键并读取控制台,最有可能的是XML对于IE无效。 – 2013-05-01 14:59:28

+0

XML5618:非法名称字符。 ,line 1 character 75 不知道该去哪里... – Surep 2013-05-01 15:11:32

+0

你的xml里有没有'&'?他们需要逃脱。找出该xml字符串的字符75处的字符。 – 2013-05-01 15:13:09

问题是您正在从纯文本形成XML,但未处理XML的转义语法。最简单的方法是使用转义函数:how to escape xml entities in javascript?

然后在addField函数中,在value上调用此转义函数。

+0

我不太明白......如果可能,你能否提供一个例子吗? – Surep 2013-05-01 19:32:24

+0

@Surep:Dan发布的链接上有一个理想的例子。因此,不要在'addField'函数中使用'value',而是使用'value.replace('&','&')'。按照这个例子,如果你可能期望其他未编码的实体,你可以链接更多的'replace'方法。 – halfer 2013-05-03 10:28:11