无法让$ .ajax()在PhoneGap中针对本地托管的服务器工作

时间:2012-06-26 19:37:27

标签: android jquery ajax rest cordova

目前正试图从我的机器上的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来使其工作)

由于

2 个答案:

答案 0 :(得分:0)

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

  2. jQuery希望数据为字符串,请尝试:

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

    并且为了好的措施,添加

    contentType: 'application/json',
    
    在你的ajax设置中

答案 1 :(得分:0)

对于任何看过这个问题的人来说,问题最终成为IIS Express在本地计算机上使用的端口。当我通过80端口路由时,一切正常。