我正在开发一个项目,我正在使用REST与数据库进行通信,它会生成XML代码,示例如下所示。
<ns2:MultipleResponse xmlns:ns2="http://v1_0.model.service.mydomain.com">
<ns2:AttributeType>
<ID>1</ID>
<Version>0</Version>
<ns2:Name>Type of Address</ns2:Name>
<ns2:Definition>Definition for Type of Address</ns2:Definition>
<ns2:DataType>ShortText</ns2:DataType>
<ns2:MultipleSelect>false</ns2:MultipleSelect>
<ns2:AttributeGroupType>
<ID>1</ID>
<Version>0</Version>
<ns2:Name>Address</ns2:Name>
<ns2:Code>ADR</ns2:Code>
<ns2:Definition>Definition of Address</ns2:Definition>
</ns2:AttributeGroupType>
</ns2:AttributeType>
</ns2:MultipleResponse>
我从Spring MVC中的Web GUI调用我的REST。
我使用jQuery从另一个选择下拉列表的选择中填充一个选择下拉列表。这适用于Chrome,但不适用于FF或IE。 我在FF中使用Firebug并且它给了我这个错误:
选择器未找到任何元素:“AttributeType”
我的jquery:
<script type="text/javascript">
$(document).ready(function() {
var html = '<option value>Välj</option>';
$('#serviceTypeAttributeGroup').change(function() {
$.ajax({
url: "http://server/project-web/services/rest/auth/v1_0/attributetypes/servicetypeattributegroup/" + $('#serviceTypeAttributeGroup').val(),
type: "GET",
contentType: 'application/xml; charset=utf-8',
dataType: "xml",
success: function(data) {
$(data).find("AttributeType").each(function() {
html = '';
var $attribute = $(this);
var id = $attribute.children("ID:first").text();
var name = $attribute.find("Name:first").text();
html += '<option value="' + id + '">' + name + '</option>';
$('#attributeType').html(html);
});
}
});
return false;
});
$('#attributeType').html(html);
});
我尝试将“AttributeType
”更改为“ns2:AttributeType
”,“ns2\\:AttributeType
”和“ns2\:AttributeType
”,但这不会更改FF中的错误消息并且代码停止在Chrome中运行。
当我查看FF中的XML时,它只显示纯文本,如果有任何帮助的话?在Chrome中,我看到了所有标签。
我选择的下拉菜单:
<tr>
<th><label for="serviceTypeAttributeGroup"><s:message code="servicetypeattributegroup" />:</label></th>
<td><sf:select path="serviceTypeAttributeGroup.ID" id="serviceTypeAttributeGroup">
<sf:option value="0"> </sf:option>
<sf:options items="${listOfAttributeGroups}" itemLabel="attributeGroupType.name" itemValue="ID" />
</sf:select></td>
</tr>
<tr>
<th><label for="attributeType"><s:message code="attributetype" />:</label></th>
<td><sf:select path="attributeType.ID" id="attributeType">
<sf:option value="0"> </sf:option>
</sf:select></td>
</tr>
有没有人知道什么是错的?我怎么纠正它?
答案 0 :(得分:1)
你应该试着像这样逃避:
$(data).find("ns2\\:AttributeType")
答案 1 :(得分:0)
最有可能这条线导致问题
url: "http://server/project-web/services/rest/auth/v1_0/attributetypes/servicetypeattributegroup/" + $('#serviceTypeAttributeGroup').val(),
您应该尝试使用相对路径,而不是将竞争路径提供给服务器。否则,某些浏览器会因同源策略
而阻止答案 2 :(得分:0)
我将jQuery更改为
<script type="text/javascript">
$(document).ready(function() {
var html = '';
$('#serviceTypeAttributeGroup').change(function() {
html = '';
$.ajax({
url: '<c:url value="/mvc/serviceTypeAttribute/attributeTypes" />',
type: "GET",
data: "id=" + $('#serviceTypeAttributeGroup').val(),
dataType: 'json',
success: function(response) {
$(jQuery.parseJSON(JSON.stringify(response))).each(function() {
html += '<option value="' + this.id + '">' + this.name + '</option>';
$('#attributeType').html(html);
});
}
});
$('#attributeType').html(html);
});
return false;
});
</script>
并在我的控制器中创建了一个方法,现在它在Chrome和FF中都有效。
感谢您输入的人!