我在jQuery中有一个异步调用,其中一个POST请求返回一个HTTP 200,但是没有响应文本或任何可以从相关端点使用的东西。
我对我的Localhost上的原因感到困惑,因为当我使用相同的调用来轮询像JSONTest这样的服务时,我得到了一个有效的对象作为回报。
这就是结果端点的样子,使用Slim
在PHP中编写$app->post("/search", function() use ($app) {
try {
$request = $app->request;
$body = $request->getBody();
$input = json_decode($body);
//Prepare search string
$query = "%". $input->query . "%";
$grade = '%grade ' . $input->grade . "%";
$meta = $input->meta;
$proc_results = array();
$item = new stdClass();
$item->id = 1;
$item->source = "source";
$item->type = "lesson_plan";
$item->description = "Description of the Lesson Plan";
$item->date_created = 1234567890;
$proc_results[] = $item;
$app->response()->header('Content-Type','application/json');
$app->response()->body(json_encode($proc_results));
} catch (Exception $e) {
}
});
当使用像POSTMAN这样的实用程序时,此调用会返回JSON响应,但是当我使用以下测试jQuery代码时,我得到一个没有responseText的对象或我的解释器具有该对象的任何符号。
$.ajax({
"type":"POST",
"url":"http://localhost:9001/search",
"data":{"query":"math","grade":"4"}
}).done(function(result) {
console.debug(result);
});
我在done()调用中缺少一个组件来轮询资源吗?我的Slim调用发送格式错误的JSON吗?如果需要,我可以在线获得一个有效的演示。
答案 0 :(得分:0)
类型,网址,数据不应该是字符串。尝试不是字符串。它应该工作。数据的键也不应该是字符串。
试试这个
$.ajax({
type:"POST",
url:"/search",
data:{query:"math",grade:"4"}
}).done(function(result) {
console.debug(result);
});
答案 1 :(得分:0)
尝试将数据类型设置为JSON,扩展@ doniyor的答案:
$.ajax({
type:"POST",
url:"/search",
datatype:"json",
data:{query:"math",grade:"4"}
}).done(function(result) {
console.debug(result);
})
请参阅:http://api.jquery.com/jquery.ajax/
从您的评论中可以看出,您正在寻找JSON。
答案 2 :(得分:0)
我找到了根本原因:我没有发送有效的JSON for PHP来解析。通过添加JSON.stringify,它会按预期响应:
$.ajax({
type:"POST",
url:"http://localhost:9001/search",
dataType:"json",
contentType: "application/json",
data: JSON.stringify({"query": "math", "grade": "4", "meta": "z"})
}).done(function(result) {
console.debug(result);
});
感谢各位帮忙。