You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中条件匹配正确但if语句未触发的问题排查与解决

Dart请求PHP接口返回值判断不匹配的问题解决

问题场景

用Dart的http.post请求PHP接口,PHP端通过echo json_encode("success")返回结果。但在Dart中执行if (data == "success")时,始终进入else分支,更换其他字符串测试也存在同样问题。

原因分析

PHP的json_encode("success")会把字符串处理成带双引号的JSON格式字符串,实际返回给Dart的内容是"success"(包含双引号)。而代码里用裸字符串"success"直接比较,自然不相等。

解决办法

  1. 直接匹配带引号的字符串
    定义包含转义双引号的字符串变量,用来和返回值比较:

    String expected = "\"success\"";
    if (data == expected) {
      // 执行预期逻辑
    }
    
  2. 解析JSON拿到原始值(推荐)
    用Dart的jsonDecode解析返回的JSON字符串,得到不带引号的原始字符串再比较,这是处理JSON数据的规范做法:

    import 'dart:convert';
    import 'package:http/http.dart' as http;
    
    // 发起请求并处理
    final response = await http.post(Uri.parse("你的PHP接口地址"));
    if (response.statusCode == 200) {
      final decodedResult = jsonDecode(response.body);
      if (decodedResult == "success") {
        // 进入预期分支
      } else {
        // 其他逻辑
      }
    }
    
  3. 修改PHP端返回方式
    如果不需要返回JSON格式,PHP端可以直接输出裸字符串,不用json_encode:

    echo "success";
    

    这种方式适合简单字符串返回,但如果后续需要返回数组、对象等复杂数据,还是推荐用JSON格式配合Dart的解析方法。

内容的提问来源于stack exchange,提问作者ronie arnibal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:05:27