2014-08-14 7 views
0

У меня есть асинхронный вызов в jQuery, где запрос POST возвращает HTTP 200, но нет текста ответа или чего-либо другого, с которым можно работать с указанной конечной точкой.jQuery Ajax вызов не возвращает ничего

Я смущен, что может быть причиной моего Localhost, так как, когда я использую один и тот же вызов для опроса службы, такой как JSONTest, я возвращаю действительный объект обратно.

Это то, что результат конечной выглядит, написанный на 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) { 

     } 
    }); 

Этот вызов делает возвращает ответ JSON при использовании утилиты как POSTMAN, но когда я использую следующий тестовый код JQuery, я получить объект, у которого нет ответаText или любой знак, что мой интерпретатор имеет объект.

$.ajax({ 
    "type":"POST", 
    "url":"http://localhost:9001/search", 
    "data":{"query":"math","grade":"4"} 
}).done(function(result) { 
    console.debug(result); 
}); 

Я пропустил компонент в своем сделанном() вызове для опроса ресурсов? Является ли мой Slim-вызов отправкой неправильно сформированного JSON? При необходимости я могу получить рабочую демонстрацию в Интернете.

+0

Являются ли сервер и клиент в том же домене/порту? –

+0

Да, оба существуют на порту теста PHP Server, 9001. –

ответ

0

Тип, url, данные не должны быть строками. Попробуйте как не строку. Он должен работать. Также ключи данных не должны быть строковыми.

Попробуйте

$.ajax({ 
    type:"POST", 
    url:"/search", 
    data:{query:"math",grade:"4"} 
}).done(function(result) { 
    console.debug(result); 
}); 
+0

Также было бы полезно указать тип контента и тип данных. Тем не менее, все равно работайте нормально. – MightyLampshade

+0

Ответ работает и возвращает 200, но я не получаю ожидаемый объект: 'Object {readyState: 1, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function ...}'. Я ожидаю что-то с '[{" id ": 1,}]' и т. Д. –

+0

Тогда это проблема с серверами. Не проблема ajax. Убедитесь, что вы возвращаете правильный объект в правильной форме. – doniyor

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 в результате.

0

Я нашел основную причину: я не отправлял действительный 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); 
}); 

Спасибо, ребята, за помощь.

Смежные вопросы