我有以下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
之外,其他一切都正常(我得到了期望的响应),因此它返回 all 个用户的列表。>
结果:
{term: null, results: Array(5)}
似乎没有通过请求发送数据。
我尝试过的事情:
{name: value}
更改为{name: 'test'}
(函数调用的第二个参数)var json_data
行,并将data: json_data,
替换为data: data
为什么我的数据没有通过请求发送?
答案 0 :(得分:1)
您的PHP端点是否配置为接受JSON?我不认为默认情况下是这种情况(假设您未使用服务器端库或框架)。
您可以改为发送表单编码的数据。为此,请删除contentType: "application/json;charset=utf-8",
并使用data: data
而不在其上调用JSON.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);
}
});
}
请注意,这使您的功能几乎完全多余,但是我还是把它留了下来。