读书人

小弟我为什么得不到响应的XML文档50

发布时间: 2012-02-07 17:45:36 作者: rapoo

我为什么得不到响应的XML文档,50请教
这个是HTM文件的代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN ">
<html>
<head>
<title> 9_1 </title>
<meta name= "GENERATOR " content= "Microsoft Visual Studio .NET 7.1 ">
<meta name= "ProgId " content= "VisualStudio.HTML ">
<meta name= "Originator " content= "Microsoft Visual Studio .NET 7.1 ">
<script type= "text/javascript " src= "js/net.js "> </script>
<script type= "text/javascript ">
function FillTerritory(oElem,oTarget)
{
var strValue = oElem.options[
oElem.selectedIndex].value;
var url = '9_1.aspx ';
var strParams = 'q= ' + strValue +
"&f= " + oTarget.form.name +
"&e= " + oTarget.name;
var loader1 = new
net.ContentLoader(url,FillDropDown,null, //目标服务器端脚本的URL,回调函数,错误处理函数,使用的HTTP方法,以及发送的参数
"POST ",strParams);
}
function FillDropDown()
{
var xmlDoc = this.req.responseXML.documentElement;



var xSel = xmlDoc.getElementsByTagName( 'selectElement ')[0];
var strFName = xSel.childNodes[0].firstChild.nodeValue;
var strEName = xSel.childNodes[1].firstChild.nodeValue;

var objDDL = document.forms[strFName].elements[strEName];
objDDL.options.length = 0;

var xRows = xmlDoc.getElementsByTagName( 'entry ');
for(i=0;i <xRows.length;i++)
{
var theText = xRows[i].childNodes[0].firstChild.nodeValue;
var theValue = xRows[i].childNodes[1].firstChild.nodeValue;
var option = new Option(theText,theValue);
objDDL.options.add(option,objDDL.options.length);
}
}
</script>
</head>
<body>
<form name= "Form1 " ID= "Form1 ">


<select name= "ddlRegion " onchange= "FillTerritory(this,document.Form1.ddlTerritory) " ID= "Select1 ">
<option value= "-1 "> Pick A Region </option>
<option value= "1 "> Eastern </option>
<option value= "2 "> Western </option>
<option value= "3 "> Northern </option>
<option value= "4 "> Southern </option>
<option value= "5 "> Eastern </option>
<option value= "6 "> Western </option>
</select>
<select name= "ddlTerritory " ID= "Select2 ">
</select>
</form>
</body>
</html>
这个是后台C#代码
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.OracleClient;
using System.Xml;
namespace Ajax_in_action
{
/// <summary>
/// _9_1 的摘要说明。
/// </summary>
public class _9_1 : System.Web.UI.Page
{
//29-34
OracleConnection conn = null;
private string connStr = System.Configuration.ConfigurationSettings.AppSettings[ "dsn "];
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Response.ContentType = "text/xml ";
string resultxml = " <?xml version= '1.0 ' ?> ";
int qq = Convert.ToInt32(Request.Form[ "q "]);
string ff = Request.Form[ "f "];
string ee = Request.Form[ "e "];
if (qq > 0)
{
qq += 28;
resultxml += " <selectChoice> ";
resultxml += " <selectElement> ";
resultxml += " <formName> "+ff+ " </formName> ";
resultxml += " <formElem> "+ee+ " </formElem> ";
resultxml += " </selectElement> ";
resultxml += " <entry> ";
resultxml += " <optionText> Select A Territory </optionText> ";
resultxml += " <optionValue> -1 </optionValue> ";
resultxml += " </entry> ";
DataSet dset = new DataSet();
DataTable dt = new DataTable();
conn = new OracleConnection(connStr);
string sqlQueryNew = "select pdfid,title from GEO3DSHWEB.pub_pdf where typeid= ' "+qq+ " ' ";
OracleCommand comm = new OracleCommand(sqlQueryNew,conn);
conn.Open();
OracleDataAdapter da = new OracleDataAdapter(comm);
da.Fill(dset, "MaintainNews ");
conn.Close();


dt = dset.Tables[ "MaintainNews "];
int num = dt.Rows.Count;
for(int i=0;i <num;i++)
{
int temp = i+1;
resultxml += " <entry> ";
resultxml += " <optionText> "+dt.Rows[i].ItemArray[1]+ " </optionText> ";
resultxml += " <optionValue> "+temp+ " </optionValue> ";
resultxml += " </entry> ";
}
resultxml += " </selectChoice> ";
HttpContext.Current.Response.Write(resultxml.ToString());
//Response.Write(resultxml.ToString());
}
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
这个是NET.JS中的代码
/*
url-loading object and a request queue built on top of it
*/

/* namespacing object */
var net=new Object();
net.READY_STATE_UNINITIALIZED=0;
net.READY_STATE_LOADING=1;
net.READY_STATE_LOADED=2;
net.READY_STATE_INTERACTIVE=3;
net.READY_STATE_COMPLETE=4;


/*--- content loader object for cross-browser requests ---*/
net.ContentLoader=function(url,onload,onerror,method,params,contentType){
this.req=null;
this.onload=onload;
this.onerror=(onerror) ? onerror : this.defaultError;
this.loadXMLDoc(url,method,params,contentType);
}

net.ContentLoader.prototype.loadXMLDoc=function(url,method,params,contentType){
if (!method){
method= "GET ";
}
if (!contentType && method== "POST "){
contentType= 'application/x-www-form-urlencoded ';
}
if (window.XMLHttpRequest){
this.req=new XMLHttpRequest();
} else if (window.ActiveXObject){
this.req=new ActiveXObject( "Microsoft.XMLHTTP ");
}
if (this.req){
try{
var loader=this;
this.req.onreadystatechange=function(){
net.ContentLoader.onReadyState.call(loader);
}
this.req.open(method,url,true);
if (contentType){
this.req.setRequestHeader( 'Content-Type ', contentType);
}


this.req.send(params);
}catch (err){
this.onerror.call(this);
}
}
}


net.ContentLoader.onReadyState=function(){
var req=this.req;
var ready=req.readyState;
if (ready==net.READY_STATE_COMPLETE){
var httpStatus=req.status;
if (httpStatus==200 || httpStatus==0){
this.onload.call(this);
}else{
this.onerror.call(this);
}
}
}

net.ContentLoader.prototype.defaultError=function(){
alert( "error fetching data! "
+ "\n\nreadyState: "+this.req.readyState
+ "\nstatus: "+this.req.status
+ "\nheaders: "+this.req.getAllResponseHeaders());
}
我调试了,发现XML代码生成是正常的,但就是得不到响应的XML文档,也就是说,调试的时候HTM文件中的xmlDoc是null,我不知道为什么,请大家帮着解决一下,拜托了。

[解决办法]
ls...看到这句么...
net.ContentLoader.onReadyState.call(loader);
[解决办法]
oh , i see

加一句
Response.End();
在你的cs文件李
Response.Write(resultxml.ToString());
的下面

读书人网 >JavaScript

热点推荐