首先看代码
var 
  Form2: TForm2; 
  xmlHttp:OleVariant; procedure asyn(); implementation 
uses ComObj; {$R *.dfm} 
{有了要连接的 URL 后就可以配置请求了。可以用 XMLHttpRequest 对象的 open() 方法来完成。该方法有五个参数: request-type:发送请求的类型。典型的值是 GET 或 POST,但也可以发送 HEAD 请求。  
url:要连接的 URL。  
asynch:如果希望使用异步连接则为 true,否则为 false。该参数是可选的,默认为 true。  
username:如果需要身份验证,则可以在此指定用户名。该可选参数没有默认值。 
password:如果需要身份验证,则可以在此指定口令。该可选参数没有默认值。} 
procedure TForm2.btn1Click(Sender: TObject); 
begin   xmlHttp.open('GET','http://www.163.com',false); 
//  xmlhttp.onreadystatechange:=asyn;   xmlHttp.send(null); 
  if xmlHttp.status=200 then 
    mmo1.Text:=xmlHttp.responsetext 
  else 
  if xmlHttp.status=404 then 
    ShowMessage('page not exists'); 
end; procedure TForm2.FormCreate(Sender: TObject); 
begin 
  try 
    xmlHttp:=CreateOleObject('Msxml2.XMLHTTP'); 
  except 
    try 
      xmlHttp:=CreateOleObject('Microsoft.XMLHTTP'); 
    except 
      ShowMessage('can''t create ajax'); 
    end;   
  end; 
end; 

Ajax 应用程序中需要了解五种就绪状态: 0:请求没有发出(在调用 open() 之前)。  
1:请求已经建立但还没有发出(调用 send() 之前)。  
2:请求已经发出正在处理之中(这里通常可以从响应得到内容头部)。 
3:请求已经处理,响应中通常有部分数据可用,但是服务器还没有完成响应。 
4:响应已完成,可以访问服务器响应并使用它。 


因此除了就绪状态外,还需要检查 HTTP 状态。我们期望的状态码是 200, 
它表示一切顺利。如果就绪状态是 4 而且状态码是 200,就可以处理服务器的数据了, 
而且这些数据应该就是要求的数据(而不是错误或者其他有问题的信息)。 
因此还要在回调方法中增加状态检查 

procedure asyn(); 
begin 
  case xmlHttp.readyState of 
    2:Form2.Caption:='请求已经发出正在处理之中(这里通常可以从响应得到内容头部)。'; 
    3:Form2.Caption:='请求已经处理,响应中通常有部分数据可用,但是服务器还没有完成响应。'; 
    4:
..........这里我用的同步 没有问题
如果把这里
  xmlHttp.open('GET','http://www.163.com',false);
//  xmlhttp.onreadystatechange:=asyn;   xmlHttp.send(null); 
  if xmlHttp.status=200 then 
    mmo1.Text:=xmlHttp.responsetext 
  else 
  if xmlHttp.status=404 then 
    ShowMessage('page not exists'); 修改成
  xmlHttp.open('GET','http://www.163.com',false);
  xmlhttp.onreadystatechange:=asyn;
就报 非选择性参数。
上面的代码 如果用js是正确的。
我想问下 这是不是因为js 回调 函数和 delphi的回调函数不一样?
如果要实现异步 怎么办?我这里指 用 delphi实现 而不是 js。js我也会。
谢谢各位。