我尝试使用dart将数据发布到php后端。通过某种方式使用ajax,我可以获得响应,但是使用dart,它显示
<b>Notice</b>: Trying to get property 'email' of non-object in <b>D:\xampp\htdocs\PHPBackend\api\login\login_account.php</b> on line <b>23</b><br />
<b>Notice</b>: Trying to get property 'password' of non-object in <b>D:\xampp\htdocs\PHPBackend\api\login\login_account.php</b> on line <b>24</b><br />
这些是我用于登录的php代码。
// login_account.php
$database = new Database();
$db = $database->getConnection();
$login = new Login($db);
$data = json_decode(file_get_contents("php://input"));
$login->email = $data->email;
$login->password = $data->password;
$login->loginAccount();
$login_arr = array(
"email" => $login->email,
"password" => $login->password
);
print_r(json_encode($login_arr));
?>
// login.php
function loginAccount(){
// query to read single record
$query = "SELECT
email, password
FROM
" . $this->table_name . " WHERE
email = :email AND password = :password";
// prepare query statement
$stmt = $this->conn->prepare( $query );
// sanitize
$this->email=htmlspecialchars(strip_tags($this->email));
$this->password=htmlspecialchars(strip_tags($this->password));
// bind id of food to be updated
$stmt->bindParam(":email", $this->email);
$stmt->bindParam(":password", $this->password);
die($this->email);
die($this->password);
// execute query
$stmt->execute();
// get retrieved row
$row = $stmt->fetch(PDO::FETCH_ASSOC);
// set values to object properties
$this->email = $row['email'];
$this->password = $row['password'];
}
}
这就是我尝试使用dart获得响应的方法。 emailValue
和passwordValue
从文本字段中获取。
var loginObj = new Map<String, dynamic>();
loginObj['email'] = emailValue;
loginObj['password'] = passwordValue;
final response = await http.post(Uri.encodeFull("http://192.168.1.90/phpbackend/api/login/login_account.php"),
headers: {"Accept": "application/json"},
body: loginObj);
print(response.body); // check the status code for the result
if (response.statusCode == 200) {
}
}
答案 0 :(得分:1)
其他信息
有一个dart程序包,为http请求提供了一些帮助程序类。
Github:https://github.com/Ephenodrom/Dart-Basic-Utils
通过以下方式安装:
dependencies:
basic_utils: ^1.5.1
它也是EZ-Flutter系列的一部分:
Github:https://github.com/Ephenodrom/EZ-Flutter 文件:https://ez-flutter.de/docs
dependencies:
ez_flutter: ^0.2.5
用法
Map<String, String> headers = {
"Some": "Header"
};
Map<String, String> queryParameters = {
"Some": "Parameter"
};
String url = "";
Map payload = "{}";
Map<String, dynamic> reaponseBody;
try {
responseBody = await HttpUtils.postForJson(url, json. encode(payload) ,
queryParameters: queryParameters, headers: headers);
} catch (e) {
// Handle exception, for example if response status code != 200-299
}
// do something with the response body
其他信息:
这些都是HttpUtils类中的所有方法。
Future<Map<Response> getForFullResponse(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> getForJson(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<String> getForString(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<Map<Response> postForFullResponse(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> postForJson(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> postForString(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Response> putForFullResponse(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> putForJson(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> putForString(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Response deleteForFullResponse(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> deleteForJson(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> deleteForString(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Map<String, dynamic> getQueryParameterFromUrl(String url);
String addQueryParameterToUrl(String url, Map<String, dynamic> queryParameters);
答案 1 :(得分:0)
我可以在Dart代码中看到您正在尝试直接发送Map对象,而不是先将其转换为例如JSON。
要转换为JSON,可以使用dart:convert包和以下方法:
public class OasisBot : ActivityHandler
{
private IConfiguration _config;
private ILogger<OasisBot> _logger;
public OasisBot(IConfiguration config, ILogger<OasisBot> logger)
{
_config = config;
_logger = logger;
}
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
try
{
var requestJson = JsonConvert.SerializeObject(turnContext.Activity);
_logger.LogInformation("Request Object:" + requestJson.ToString());