一般的なhtmlファイル(モバイルにロードされる)からサーバーにajaxリクエストを送信しようとしていますが、ここでいくつかの問題が発生しています。
RestClientを使用する場合、WizToolsから、bodyを使用してjson POSTコマンドを簡単に作成し、{"email":"myemail", "password":"mypassword"}
ヘッダー"Content-type":"application/json"
とを設定できます"Accept":"application/json"
。
しかし、ブラウザからcontentTypeを追加すると、POSTではなくOPTIONSメソッドが送信され、サーバーはPOSTを期待しています。contentTypeタグを削除すると、リクエストはPOSTで問題なく実行されますが、サーバーはそれをJSONとして認識しないため、リクエストをブロックします。
なぜこれが起こるのですか?これを解決してユーザーのデータを一覧表示するにはどうすればよいですか?
<html>
<head>
<script src="jquery-1.7.2.min.js"></script>
<script src="jquery.mobile-1.2.0-alpha.1.min.js"></script>
<script>
function runAjax() {
var url_p = "https://myserver/list";
var emailVal = "email@email.com"
var passwordVal = "mypwd"
$.ajax({
type: 'POST',
url: url_p,
dataType: "application/json",
contentType: "application/json; charset=utf-8",
data: { "email": emailVal, "password": passwordVal },
success: function (data, textStatus, jqXHR) {
$("#result").html(data);
},
error: function(jqXHR,error, errorThrown) {
if(jqXHR.status&&jqXHR.status==400){
alert(jqXHR.responseText);
}else{
alert("Something went wrong");
}
},
dataType: "json"
});
}
function resetValue(){
$("#result").html("");
}
</script>
</head>
<body>
<button onclick="runAjax()">Post Ajax call</button>
<button onclick="resetValue()">Reset value</button>
<p>Result</p>
<p id="result"></p>
</body>
</html>
ありがとう
編集
これはAjaxのクロスドメインの問題のようです。それ以来、データ型としてjsonpを使用しようとしましたが、HTTPはPOSTではなくGETリクエストを使用します...
2010年には、ドメイン間でjsonpでPOSTを使用できなかったことがわかりました...今はそうなのだろうか。
編集2
私はこのajaxコード(Pedro Carmonaのクレジット)を使用することになりました:
<html>
<head>
<script src="jquery-1.7.2.min.js"></script>
<script src="jquery.mobile-1.2.0-alpha.1.min.js"></script>
<script>
function rpc_call(){
var http = new XMLHttpRequest();
var url = "https://yourserver/list";
var params = "email=Useremail&password=pwd";
http.open("POST", url, true);
http.setRequestHeader("Accept", "application/json");
http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http.onreadystatechange = function() {//Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
$("#resposta").html(http.responseText);
}
}
http.send(params);
}
function apagaConteudo(){
$("#resposta").html("");
}
</script>
</head>
<body>
<button onclick="rpc_call()">Post Ajax call</button>
<button onclick="apagaConteudo()">Apagar conteudo</button>
<p>Resposta</p>
<p id="resposta">____Cena______</p>
</body>
</html>