【问题标题】:can't receive response from server in slim无法接收来自服务器的响应
【发布时间】:2017-01-24 14:12:18
【问题描述】:

我们正在使用 php-framework "slim" 来建立一个电子商店。现在我们遇到一个问题,我们可以向服务器发送请求并修改数据库(我们检查了表,它确实改变了),而web端无法从数据库中获取响应(iOS和android端都可以得到它) )。以下是发送请求、更新数据库并获取响应的代码部分:

$app->post('/tblUser', function($request, $response, $args) {
   get_tblUser_id($request->getParsedBody());
});
function get_tblUser_id($data)
{
   $db = connect_db();
   $sql = "update  tblphoneverify set dtCreate = NOW() where strPhone = $data[phone]";
   $db->query($sql);
   $updateId = $db->affected_rows;
$db = null;
    $msg = array(
        'stat' => '',
        'msg' => ''
    );
    $msg['stat'] = '1';
    $msg['msg'] = 'registration success';
    return json_encode($msg);
}

那么这个ajax段触发click事件执行post并接收结果的状态:

$(function(){
  $("#getcheck").click(function(){
    $.ajax({
      type:"post",
      url:"http://192.168.1.108/blue/public/tblUser",
      data: {"phone":"13331111111"},
      dataType:"json",

      //async:false,
      contentType: "application/x-www-form-urlencoded",

      success:function(data){
        alert(1);
      },
      error:function(XMLHttpRequest, textStatus, errorThrown){
        alert(XMLHttpRequest.readyState);
        alert(XMLHttpRequest.status);
        alert(XMLHttpRequest.statusText);
        alert(XMLHttpRequest.responseText);
        alert(textStatus);
        alert(errorThrown);
      }
    })
  })
})

代码总是跳过“成功”部分,直接跳转到“错误”。 那么我们的代码有什么问题呢?提前致谢。

【问题讨论】:

  • 查看 JavaScript 控制台中的错误消息。
  • 你没有回显你的json编码字符串,所以ajax请求可能会出错,因为他没有可以解析的json

标签: php ajax slim


【解决方案1】:

您应该从可调用的路由中发送响应。不要json_encode自己,而是让 Slim 来做。

首先,从get_tblUser_id返回一个数组:

function get_tblUser_id($data)
{
    $db = connect_db();
    $sql = "update tblphoneverify set dtCreate = NOW() where strPhone = $data[phone]";
    $db->query($sql);
    $updateId = $db->affected_rows;
    $db = null;
    $msg = array(
        'stat' => '',
        'msg' => ''
    );
    $msg['stat'] = '1';
    $msg['msg'] = 'registration success';
    return $msg;
}

请注意,这里存在 SQL 注入漏洞。将 SQL 更改为如下所示:

   $sql = "update tblphoneverify set dtCreate = NOW() where strPhone = ?";
   $db->query($sql, [$data[phone]]);

接下来,您需要从可调用的路由中以 JSON 格式发送响应。 Slim 有一个方法可以做到这一点:

$app->post('/tblUser', function($request, $response, $args) {
    $msg = get_tblUser_id($request->getParsedBody());

    return $response->withJson($msg);
});

Slim 现在将发送回您的 msg 数组,其中包含正确的内容类型标头集,这将有助于您的 JavaScript 对其进行解码。

【讨论】:

  • 我们已经修复了这个错误,它是关于跨域的。我会记住你的建议。非常感谢您提醒 SQL 和 slim 方法。
猜你喜欢
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 2014-08-22
  • 2013-05-13
  • 1970-01-01
相关资源
最近更新 更多