目前正试图从我的机器上的Android VM(Bluestacks)向IIS Express托管MVC 4 Web API端点发出ajax post请求。以下是我正在尝试的代码片段,但无法开始工作:
$.ajax({
type: "POST",
url: "http://10.0.2.2:28434/api/devices",
data: {'EncryptedPassword':'1234','UserName':'test','DeviceToken':'d234'}
}).always(function( data, textStatus, jqXHR ) {
alert( textStatus );
});
每当我运行此请求时,我总会收到一个'error'的textStatus。经过几个小时尝试不同的事情,我把我的终点推到了一个真正的服务器上,如果我手工建立了一个XMLHttpRequest,它能够真正得到PhoneGap的响应,如下所示:
var request = new XMLHttpRequest();
request.open("POST", "http://172.16.100.42/MobileRewards/api/devices", true);
request.onreadystatechange = function(){//Call a function when the state changes.
console.log("state = " + request.readyState);
console.log("status = " + request.status);
if (request.readyState == 4) {
if (request.status == 200 || request.status == 0) {
console.log("*" + request.responseText + "*");
}
}
}
request.send("{EncryptedPassword:1234,UserName:test,DeviceToken:d234}");
不幸的是,如果我尝试对上面代码段中的相同端点使用$ .ajax(),我仍然会收到一个显示“错误”的状态文本,这里是该片段供参考:
$.ajax({
type: "POST",
url: "http://172.16.100.42/MobileRewards/api/devices",
data: {'EncryptedPassword':'1234','UserName':'test','DeviceToken':'d234'}
}).always(function( data, textStatus, jqXHR ) {
alert( textStatus );
});
所以,这里有几个问题。
1)为什么我不能在运行Android VM的同一台机器上通过IIS Express托管成功点击我的终点时获得任何ajax调用(post或get)?
2)当我的终点托管在一个实际的服务器上,通过IIS并通过端口80提供服务时,为什么我在使用jquery的ajax调用时无法获得成功的帖子请求? (即使我可以通过手动创建XMLHttpRequest来使其工作)
由于
答案 0 :(得分:0)
您确定BlueStacks使用与模拟器相同的主机IP(10.0.2.2)吗?我不熟悉它,所以我不确定答案是什么。
jQuery希望数据为字符串,请尝试:
data: JSON.stringify({'EncryptedPassword':'1234','UserName':'test','DeviceToken':'d234'});
并且为了好的措施,添加
contentType: 'application/json',
在你的ajax设置中。
答案 1 :(得分:0)
对于任何看过这个问题的人来说,问题最终成为IIS Express在本地计算机上使用的端口。当我通过80端口路由时,一切正常。