2

所以我正在尝试使用 AJAX 在 dart 客户端和 php 服务器端之间进行通信。因为直接执行是不可能的。我将 dart 编译为 javascript,然后在 apache 服务器上运行它。

客户端生成json数据,但服务器没有响应

飞镖代码

import 'dart:html';
import 'dart:json';

void main() {
  query("#clicker").on.click.add(callServer);

}

void callServer(Event event) {
  var data ={ 'name':"sendname"}
  ,jsondata=stringify(data);
  print(jsondata);

  var req = new HttpRequest();
  req.open('post','http://localhost:8080/darttest/server.php',true);
  //req.setRequestHeader('Content-type','application/json');
  req.send(jsondata);
  print(req.responseText);
}

php方面我只是回显收到的内容

<?php

$name = $_POST['name'];
echo $name;

?>

这是我第一次尝试 dart 编程,所以请告诉我这种方法是否可行

4

3 回答 3

2

localhost:8080 是否同时为静态 Dart(作为 JS)和 php 提供服务?如果没有,您可能会遇到这个access-control-allow-origin问题(这是一个浏览器安全问题)。

这可以防止一个站点将日期发布到另一个站点。

解决方法:

  1. 确保提供 php 的站点返回正确的 CORS 标头:http ://enable-cors.org/server.html
  2. 从同一 URL (localhost:8080) 提供静态 Dart/JS 文件

有关更多信息,请阅读以下内容:

此处描述了更新解决方法 3(对于 Chrome / Dartium): https ://groups.google.com/a/dartlang.org/d/msg/misc/kg13xtD​​7aXA/uxeXXrw3CG8J

您可以在 chrome.exe 中添加参数“--disable-web-security”来禁用跨域检查。

(当然,这只在你开发的时候有用)

于 2013-01-28T08:40:09.163 回答
1

要阅读响应,您必须将代码放入回调中readyStateChange

var req = new HttpRequest();
req.open('post','http://localhost:8080/darttest/server.php',true);
req.on.readyStateChange.add((e){
  if (req.readyState == HttpRequest.DONE && req.status == 200){
    print(req.responseText);
  }
});
req.send(jsondata);

使用您的代码,当您尝试读取响应时,未处理 http 请求。您必须等待请求完成才能读取响应。

于 2013-01-28T08:44:32.963 回答
0

这不是在 dart 和 php 之间发送数据。这是从 dart 向 php 发送数据!!!

于 2013-03-26T18:06:48.977 回答