我会尽可能准确地解释我所面临的情况。我正在开发一个基于Struts2的web应用程序,在其中一个页面中,我使用Jquery 1.4.4对Struts2 Action类进行Ajax调用(POST(,并返回一个XML,我对其进行迭代,构建一个选择框并在UI上呈现它。
这段代码在我的本地WAS6.1开发环境中运行良好。但不完全在生产服务器上(相同的WAS版本(选择框在本地环境中正确构建,但在生产环境中不正确
Ajax代码如下:
$.ajax({ url: 'DisplaySplitCriteriaValuesAction',
type:'POST',
dataType: "xml",
data:{ splitCriteriaType: $.trim($(this).text()) },
success: function( xmlResponse ) {
buildSelectBoxNoDropDown(xmlResponse, "serviceActivitiesValue", "#ServiceActivitiesValueSelectionDIV");
$('#serviceActivitiesValue').bind({
change: function(){
if($(this).val() != '-1'){
makeDefault(this,'defValueForSA');
}
}
});
} });
function buildSelectBoxNoDropDown(xmlData, selectBoxName, whereToDisplayedDiv){
var selectBoxhtml = '<select name="'+selectBoxName+'" id="'+selectBoxName+'"size="12" class="select_optionsBOX">';
$(xmlData).find('name').each(function(){
selectBoxhtml = selectBoxhtml+'<option value="'+$(this).text()+'">'+$(this).text()+'</option>';
});
selectBoxhtml = selectBoxhtml+'</select>';
$(whereToDisplayedDiv).empty();
$(whereToDisplayedDiv).append(selectBoxhtml);
}
我从Action类返回的示例XML结构
<SplitCriteriaValues><name>Sample SC Value 1</name><name>Sample SC Value 2</name><name>Sample SC Value 3</name></SplitCriteriaValues>
令人惊讶的是,在使用Firebug进行调试时,我看到了XML响应。当我比较dev和prod环境中的响应时,两者都匹配,但在"响应"选项卡旁边有一个名为"XML"的额外选项卡。我不确定这是否有什么区别。
从一个环境迁移到另一个环境时,有什么需要考虑的吗?任何解决这种奇怪行为的指针都会有所帮助。
感谢
我终于弄明白了这一点。尽管Firebug显示了响应,但缺少的XML选项卡意味着生产服务器永远不知道它接收的内容类型(或者认为它是简单的文本而不是XML(。快速查看响应标头也可以确认,默认情况下响应内容类型为text/plain。
所以我所要做的就是在Action类中将内容类型设置为"text/xml",这就解决了我的问题。我的本地服务器没有认为内容类型是个问题,但生产服务器认为是个问题。
谢谢。Sandeep