В StackOverflow есть много тесно связанных с этим вопросов, но, пожалуйста, оставайтесь со мной.
Вот сценарий: я создаю мобильное приложение, используя PhoneGap. Так эффективно я пишу приложение на jQuery Mobile, HTML и CSS.
Вот проблема: сервер является реализацией REST. Это означает, что для создания новой «сущности» (например, пользователь, машина, горячая детка) сервер прослушивает POST-запросы. Если сервер будет отвечать на запросы GET, возвращая существующие «сущности».
Как заставить мобильное приложение отправлять POST-запрос от jQuery? Это звучит просто, но имейте в виду, что jQuery изменит запрос типа данных jsonp на GET, даже если вы укажете POST. Кроме того, имейте в виду, что сервер и приложение не находятся в одном домене, поэтому этот запрос отправляется между доменами, поэтому установка типа данных для json не будет работать.
Я застрял с этим в течение 4 долгих часов. Я могу заставить его работать в мгновение ока, если я забочусь только о GET-запросах, но получение POST на сервере до сих пор оказалось невозможным.
Вот упрощение серверного кода:
class GatewayService extends Service[Request, Response] {
def apply(request: Request) = {
request.method -> Path(request.path) match {
case GET -> Root / "car" => {
println("---Get car---")
}
case POST -> Root / "car" => {
println("---New car---")
}
case _ => {
println("---Other method type ---")
}
}
}
А вот код jQuery:
function serverRequest(formId, url) {
var result = ""
var formData = readFormData(formId);
console.log("Submitting form:\n"+JSON.stringify(formData));
$.ajax({
type:"POST",
url: url,
data: JSON.stringify(formData),
dataType: "json",
success: function(response){
alert(response['message']);
console.log("Received response: "+JSON.stringify(response));
result = response;
},
error: function(jqXHR, textStatus, errorThrown){
console.log(
"The following error occured: "+ jqXHR,
textStatus, errorThrown
);
},
complete: function(){
//Nothing here for now
}
});
return result;
}
Если у вас есть идеи по получению кросс-домена POST-запросов с помощью jQuery, поделитесь секретом.
Обновление:
Пока что кажется, что вы не можете просто получить доступ к REST-серверу напрямую из мобильного приложения, разработанного на jQuery Mobile. Это правильно?