我正在尝试从一个常见的 html 文件(要在移动设备上加载)向我的服务器发送一个 ajax 请求,并且在这里遇到了一些问题。
如果我使用来自 WizTools 的 RestClient,我可以轻松地创建一个带有 body 的 json POST 命令{"email":"myemail", "password":"mypassword"}
,并设置标题"Content-type":"application/json"
和"Accept":"application/json"
.
但是当我添加 contentType 时,从浏览器中,它只是发送一个 OPTIONS 方法而不是 POST,并且服务器正在等待一个 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 使用 GET 请求而不是 POST ......
我已经看到,在 2010 年不可能跨域使用 POST 和 jsonp ......我想知道现在是不是......
编辑 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>