【问题标题】:Jquery + Ajax, Params has data but response says no dataJquery + Ajax,Params 有数据,但响应说没有数据
【发布时间】:2019-02-06 06:10:45
【问题描述】:

我有以下脚本:

$("#spid").blur(function() {
    $.ajax({
       url: 'getsponsor.php',
       type: "POST",
       dataType:'json',
       data: ({ spid: $("#spid").val() }) ,
       contentType: 'application/json; charset=utf-8',
       success: function (result) {
           $("#sponname").text(result);
       },
       error: function () {
           $("#sponname").text("Cannot fetch the sponsor name.");
       }
   }); 
});

注意:#sponname 是一个标签标签。

以下是getsponsor.php的php代码:

if(!isset($_POST['spid']) || empty($_POST['spid']))
    echo json_encode("No Data");
else {
    $spid=$_POST['spid'];
    $stmt = $con->prepare("SELECT name FROM users WHERE id=?");
    $stmt->bind_param("s",$spid);
    $stmt->execute();
    $stmt = $stmt->get_result();
    if ($stmt->num_rows >0) {
        $row = $stmt->fetch_object();
        echo json_encode($row->name);
    }
    else {
        echo json_encode("No Records");
    }
}

当我检查页面并转到 Network->Params 时,我从文本框中得到了正确的值:

spid=1125468

但是,当我转到 Network->Response 时,我收到以下消息

“无数据”

请告诉我我做错了什么?

【问题讨论】:

  • 不要使用contentType: "application/json"。 jQuery URL 对参数进行编码。
  • 您不需要同时测试!issetemptyempty 检查是否先设置。

标签: javascript php jquery ajax asynchronous


【解决方案1】:

去掉这一行:

contentType: 'application/json; charset=utf-8',

数据是通过 URL 编码发送的,而不是 JSON。 jQuery 将自己发送正确的 Content-type 标头。

【讨论】:

  • 谢谢,效果很好。但是,当我们提到 application/json 时,为什么它以 url 编码发送。请解释一下。
  • 如果您使用对象作为data: 参数,则它始终是 URL 编码的。它不关心contentType。 PHP 也不知道如何解析 JSON post 数据,它只理解 URL-encoded 和 multipart/form-data。
猜你喜欢
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2021-04-20
相关资源
最近更新 更多