【问题标题】:Send data between php and dart在 php 和 dart 之间发送数据
【发布时间】:2013-01-11 13:34:39
【问题描述】:

所以我正在尝试使用 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;

?>

这是我第一次尝试飞镖编程,所以如果这种方法可行,请告诉我

【问题讨论】:

  • 你的意思是直接执行是不可能的。你用过 Dartium 吗?
  • 尝试从 dart 调用 php 得到一些错误,例如“access-control-allow-origin”
  • 是的,这种方法是可能的(甚至是预期的)。 access-control-allow-origin 错误在我下面的回答中进行了描述,这是一个浏览器安全问题,而不是 Dart 特有的问题。

标签: php ajax post dart


【解决方案1】:

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/kg13xtD7aXA/uxeXXrw3CG8J

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

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

【讨论】:

  • 嗨,克里斯,我目前从 localhost:8080 提供 JS 和 PHP。所以我当前的代码不应该在没有 CORS 的情况下工作。 Thnx 链接此 shd 帮助直接 dart 到 php 。我会试一试
【解决方案2】:

要阅读响应,您必须将代码放入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 请求。您必须等待请求完成才能读取响应。

【讨论】:

  • 我是否需要单独激活一个 php-server 之类的?我使用了一个,但感觉 Chromium/Dartium 正在使用它自己的网络服务器。 php 脚本总是返回OK: 200 而没有request.responseText
  • 当你使用 run in dartium 时,Dart 编辑器会启动它自己的服务器(默认在http://127.0.0.1:3030/)。所以你必须使用一个单独的 php-server。
【解决方案3】:

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

【讨论】:

  • 这是评论,但不是答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
相关资源
最近更新 更多