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);
});
Другие вопросы по тегам