JQuery Ajax-вызов не возвращает ничего
У меня есть асинхронный вызов в jQuery, где запрос POST возвращает HTTP 200, но нет никакого текста ответа или чего-либо, с чем можно было бы работать из рассматриваемой конечной точки.
Я запутался в том, что может быть причиной на моем Localhost, так как, когда я использую один и тот же вызов для опроса службы, такой как JSONTest, я получаю в ответ действительный объект.
Вот как выглядит конечная точка результата, написанная на PHP с использованием Slim
$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) {
}
});
Этот вызов возвращает ответ JSON при использовании такой утилиты, как POSTMAN, но когда я использую следующий тестовый код jQuery, я получаю объект, у которого нет responseText или какой-либо признак того, что мой интерпретатор имеет объект.
$.ajax({
"type":"POST",
"url":"http://localhost:9001/search",
"data":{"query":"math","grade":"4"}
}).done(function(result) {
console.debug(result);
});
Я пропускаю компонент в моем вызове done() для опроса ресурсов? Мой тонкий вызов отправляет искаженный JSON? При необходимости я могу получить рабочую демонстрацию онлайн.
3 ответа
Я нашел основную причину: я не отправлял действительный JSON для 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);
});
Спасибо, ребята, за помощь.
Попробуйте установить тип данных как 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 в результате.
Тип, URL, данные не должны быть строками. Попробуйте как не строку. Он должен работать. Также ключи данных не должны быть строковыми.
Попробуй это
$.ajax({
type:"POST",
url:"/search",
data:{query:"math",grade:"4"}
}).done(function(result) {
console.debug(result);
});