Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
客户端HttpRequest发送的Dart空响应_Dart_Httprequest_Orientdb_Dart Html - Fatal编程技术网

客户端HttpRequest发送的Dart空响应

客户端HttpRequest发送的Dart空响应,dart,httprequest,orientdb,dart-html,Dart,Httprequest,Orientdb,Dart Html,我试图在Dart web客户端中查询OrientDB,但它似乎发送了一个空响应。这是我的主要任务。省道: import 'dart:html'; // import 'dart:async'; import 'dart:convert'; main() { // querySelector('#output').text = 'Your Dart app is running.'; HttpRequest.request("http://localhost:2480/listDataba

我试图在Dart web客户端中查询OrientDB,但它似乎发送了一个空响应。这是我的主要任务。省道:

import 'dart:html';
// import 'dart:async';
import 'dart:convert';

main() {
 // querySelector('#output').text = 'Your Dart app is running.';
  HttpRequest.request("http://localhost:2480/listDatabases", 
      method: 'GET', requestHeaders: 
          {'Access-Contol-Allow-Origin': '*'})
  .then((req) => req.onReadyStateChange.where((e) => 
      req.readyState == HttpRequest.DONE).first
  .then((e) {
    var resp = req.responseText;
    querySelector('#output').text = "${req.status}";
    Map json = JSON.decode(resp);
    var ul = querySelector('#dblist');
    for (var db in json['databases']) {
      var li = new LIElement();
      li.appendText(db);
      ul.append(li);
    }
  }));
}
这是我的index.html:

<!DOCTYPE html>

<!--
  Copyright (c) 2015, <your name>. All rights reserved. Use of this source code
  is governed by a BSD-style license that can be found in the LICENSE file.
-->

<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="scaffolded-by" content="https://github.com/google/stagehand">
    <title>WebDbList1</title>
    <link rel="stylesheet" href="styles.css">
    <script async src="main.dart" type="application/dart"></script>
    <script async src="packages/browser/dart.js"></script>
</head>

<body>

  <div id="output"></div>
  <ul id="dblist">

  </ul>

</body>
</html>

WebDbList1
如果对OrientDB特定的代码有任何疑问,以下命令将成功检索数据库列表

import 'dart:io';
import 'dart:async';
import 'dart:convert';

const String database = "dosdart1";

main(List<String> args) async {
  List dblist = new List();
  String firstName, lastName;
  print("First name?");
  firstName = stdin.readLineSync();
  print("Last name?");
  lastName = stdin.readLineSync();
  print("You entered $firstName $lastName");
  dblist = await ListDatabases();
  print("received $dblist");

  // send GET http://localhost:2480/listDatabases
  /*
  HttpClient client = new HttpClient();
  client.getUrl(Uri.parse("http://localhost:2480/listDatabases"))
  .then((HttpClientRequest request) {
    return request.close();
  }).then((HttpClientResponse response) {
    response.transform(UTF8.decoder).listen((contents) {
      print("$contents");
      Map json = JSON.decode(contents);
      List dblist = json["databases"];
      if (dblist.contains("dosdart1")) {
        print("database exists");
      } else {
        print("Creating database...");

      }
      print("Found $dblist");

    });
  });
  */
}

Future<List> ListDatabases() {
  var completer = new Completer();
  List dblist = new List();

  HttpClient client = new HttpClient();
  client.getUrl(Uri.parse("http://localhost:2480/listDatabases"))
  .then((HttpClientRequest request) {
    return request.close();
  }).then((HttpClientResponse response) {
    response.transform(UTF8.decoder).listen((contents) {
      //    print("$contents");
      Map json = JSON.decode(contents);
      print("$json");
      for (var db in json['databases']) {
        dblist.add(db);
        print("$db");
      }
    //  print("$dblist");
      completer.complete(dblist);
    });
  });
  return completer.future;


}
导入'dart:io';
导入“dart:async”;
导入“dart:convert”;
常量字符串数据库=“dosdart1”;
主(列表参数)异步{
List dblist=新列表();
字符串firstName,lastName;
打印(“名字?”);
firstName=stdin.readLineSync();
打印(“姓氏?”);
lastName=stdin.readLineSync();
打印(“您输入了$firstName$lastName”);
dblist=等待ListDatabases();
打印(“收到$dblist”);
//送走http://localhost:2480/listDatabases
/*
HttpClient=新的HttpClient();
client.getUrl(Uri.parse(“http://localhost:2480/listDatabases"))
.然后((HttpClientRequest请求){
返回请求。close();
}).然后((HttpClientResponse响应){
response.transform(UTF8.decoder).listen((内容){
打印($contents);
Map json=json.decode(内容);
List dblist=json[“数据库”];
if(dblist.contains(“dosdart1”)){
打印(“数据库存在”);
}否则{
打印(“创建数据库…”);
}
打印(“找到$dblist”);
});
});
*/
}
未来列表数据库(){
var completer=new completer();
List dblist=新列表();
HttpClient=新的HttpClient();
client.getUrl(Uri.parse(“http://localhost:2480/listDatabases"))
.然后((HttpClientRequest请求){
返回请求。close();
}).然后((HttpClientResponse响应){
response.transform(UTF8.decoder).listen((内容){
//打印($contents);
Map json=json.decode(内容);
打印($json);
for(json['databases']中的var db){
dblist.add(db);
打印($db);
}
//打印($dblist);
completer.complete(数据库列表);
});
});
返回completer.future;
}

我试图做的是从OreintDB中检索现有数据库的列表,并将其显示在我的浏览器上。我可以在命令行应用程序中实现这一目标,但在web客户端中我一直失败。有什么建议吗?我的代码编译正常,但我得到的只是Dartium上的一个空白网页。

我实现了提供给我的配置XML修复,将div标记更改为ul,下面的Dart为我提供了OrientDB数据库列表

import 'dart:html';
import 'dart:convert';

void main() {
  var root = querySelector('#output') as UListElement;
  HttpRequest.getString("http://localhost:2480/listDatabases").then((content) {
    var raw = JSON.decode(content);
    List databases = raw['databases'];
    for (String database in databases) {
      var li = new LIElement();
      li.appendText(database);
      root.append(li);
    }
  });
}
我在orient-server-config.xml中插入了以下内容:

<parameter value="Access-Control-Allow-Origin: http://localhost:63342;Access-Control-Allow-Credentials: true;Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Origin;Access-Control-Allow-Methods: POST, GET, OPTION" name="network.http.additionalResponseHeaders"/>


如果您直接在浏览器的url栏中输入此url,您会得到预期的响应?我想知道为什么您要在客户端设置“Access Control Allow Origin”标题,您应该在服务器端设置它。也许你遇到了相同的原产地政策?我在标题中拼错了“control”,但修复了那个拼写错误并没有解决问题。在这种情况下,除了OrientDB数据库服务器之外,没有“服务器”。在浏览器中输入“localhost:2480/listDatabases”将获得所需的结果。我试图使用OrientDB的REST接口。@Fox32我试图避免“同源策略”问题。@您必须在服务器端配置“访问控制允许源”。你可以在这里找到一个解释:@Fox32我道歉!我知道了如何像你说的那样配置OrientDB,我的代码给出了响应{“@type”:“d”,“@version”:0,“databases”:[“GratefulDeadConcerts”],“@fieldTypes”:“databases=e”}我的新Dart代码是import'Dart:html';main()异步{//querySelector('#output')。text='您的Dart应用程序正在运行。;var request=wait HttpRequest.request('',mimeType:“application/json”);querySelector('#output')。text=request.responseText;}我的新配置XML是我的新XML是
在前面提到的配置破解之后,下面的Dart代码得到了预期的结果:
导入'Dart:html';导入“dart:convert”;void main(){var root=querySelector('#output')作为UListElement;HttpRequest.getString(“http://localhost:2480/listDatabases)然后((内容){var raw=JSON.decode(内容);List databases=raw['databases'];…