Ajax请求未通过POST发送数据

脾气暴躁的克鲁顿

我有以下Javascript函数

http_post = function (url, data, success) {
    var json_data = JSON.stringify(data);

    return $.ajax({
        type: "POST",
        url: url,
        data: json_data,
        dataType: "json",
        contentType: "application/json;charset=utf-8",
        success: success,
        fail: function(sender, message, details) {
            console.log(sender, message, details);
        }
    });
}

我这样称呼

$('#teammate_search_input').keyup(delay(function (e) {
    var value = $(this).val();

    http_post("{{ \Path::href('roster', 'search_name') }}", {name: value}, function(data) {
        console.log(data);
    });

}, 500));

哪个击中了这个PHP脚本

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $download = $this->model('download');
    $results = $download->search_teammate($_POST['name']);
    echo json_encode(['term' => $_POST['name'], 'results' => $results]);
}   

这应该只是提取名称与输入匹配的用户列表。除了term始终设置为null所有这些都工作正常(我得到了期望的响应),因此它返回所有用户的列表

结果:

{term: null, results: Array(5)}

好像没有通过请求发送数据。

我尝试过的事情:

  • 更改{name: value}{name: 'test'}(函数调用的第二个参数)
  • 删除var json_data行并替换data: json_data,data: data

为什么我的数据没有通过请求发送?

罗里·麦克罗森(Rory McCrossan)

您的PHP端点是否配置为接受JSON?我不认为默认情况下是这种情况(假设您未使用服务器端库或框架)。

您可以改为发送表单编码的数据。为此,无需调用即可删除contentType: "application/json;charset=utf-8",和使用,如下所示:data: dataJSON.stringify()

let http_post = function(url, data, success) {
  return $.ajax({
    type: "POST",
    url: url,
    data: data,
    dataType: "json",
    success: success,
    fail: function(sender, message, details) {
      console.log(sender, message, details);
    }
  });
}

请注意,这使您的功能几乎完全多余,但无论如何我还是留了下来。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章