【问题标题】:Nothing executes after parsing XML string as an XML object将 XML 字符串解析为 XML 对象后不执行任何操作
【发布时间】:2013-05-01 14:55:34
【问题描述】:

我有一个表单,它在单击提交按钮时运行一个函数,该函数接受所有表单数据输入,从中创建一个 xml 字符串,然后将该字符串解析为 xml 对象,以便将其发送到 ASP.NET网络服务。

这是我的功能:

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 + '>';
        }

【问题讨论】:

  • 按 F12 并读取控制台,很可能 XML 对 IE 不够有效。
  • XML5618:非法名称字符。 ,第 1 行字符 75 不知道该去哪里...
  • 你的xml中有&amp;吗?他们需要逃脱。找出那个 xml 字符串的第 75 个字符是什么字符。
  • 我将xml字符串复制并粘贴到网站www.xmlvalidation.com 并没有发现错误,更新了上面问题中的数据,以便您也可以看到它。
  • addField 是做什么的?

标签: jquery xml ajax web-services http


【解决方案1】:

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

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

【讨论】:

  • 我不太明白...如果可能的话,你能给我举个例子吗?
  • @Surep:Dan 发布的链接上有一个理想的示例。因此,不要在 addField 函数中使用 value,而是使用 value.replace('&amp;', '&amp;amp;')。根据示例,如果您可能期望其他未编码的实体,您可以链接更多 replace 方法。
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 2016-04-10
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多