0

我有一个表单,单击提交按钮运行一个函数,该函数接受所有表单数据输入,从中创建一个 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");
             }
        });

    }

在第 33 行,警报没有运行,$.parseXML 之后的任何内容都没有执行(在 parseXML 函数关闭之前放置警报)。这意味着它不会向我的网络服务发布任何内容。关于为什么在将其设置为有效的 xml 对象之后没有任何工作的任何想法?

同样在成功功能中,您会注意到我正在更改页面,这在 IE 中不起作用,但在 Chrome 和 FireFox 中工作正常。

** 更新 ** 错误来自 XML 中的输入字段数据,其中插入了 & 符号......关于让它接受的任何想法?

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

1 回答 1

1

问题是您正在从纯文本形成 XML,但没有处理 XML 的转义语法。最简单的方法是使用转义函数:如何在 javascript 中转义 xml 实体?

然后在你的addField函数中,调用这个转义函数 on value

于 2013-05-01T17:18:24.013 回答