0

目前正在尝试从我机器上的 android VM (Bluestacks) 向 IIS Express 托管的 MVC 4 Web API 端点发出 ajax 发布请求。以下是我正在尝试但无法开始工作的代码片段:

    $.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 );
    });

每当我运行这个请求时,我总是会得到一个“错误”的文本状态。经过数小时尝试不同的事情后,我将 End Point 推送到了一个实际的服务器,并且如果我手动构建一个 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) 为什么当它通过 IIS Express 托管在运行 Android VM 的同一台机器上时,我无法获得任何 ajax 调用(post 或 get)来成功到达我的端点?

2)当我的端点托管在实际服务器上,通过 IIS 并通过端口 80 提供服务时,为什么在我使用 jquery 的 ajax 调用时不能成功发布请求?(即使我可以通过手动创建 XMLHttpRequest 来让它工作)

谢谢

4

2 回答 2

0
  1. 您确定 BlueStacks 使用与模拟器相同的主机 IP(10.0.2.2)吗?我不熟悉它,所以我不确定答案是什么。

  2. jQuery希望数据是一个字符串,试试:

    data: JSON.stringify({'EncryptedPassword':'1234','UserName':'test','DeviceToken':'d234'});
    

    为了更好地衡量,添加

    contentType: 'application/json',
    

    在您的 ajax 设置中。

于 2012-06-26T19:58:48.497 回答
0

对于曾经查找过此内容的任何人,问题最终是 IIS Express 在我的本地计算机上使用的端口。当我通过端口 80 进行路由时,一切正常。

于 2012-10-12T15:35:45.493 回答