Jquery Ajax调用在PhoneGap上不起作用

Jquery Ajax调用在PhoneGap上不起作用,jquery,ajax,cordova,Jquery,Ajax,Cordova,由于某种原因,$.ajax()没有被调用。它正在检测$(“#login”).submit()函数,因为我在那里有警报,它调用了它 我正在使用来构建文件,而不是我构建它们 我经常看到这种情况。但是,没有一个解决方案能帮到我。我有以下代码: signin.js: $(window).load(function() { $('#login').submit(function(e){ e.preventDefault(); obj = $(this); un = $("inp

由于某种原因,$.ajax()没有被调用。它正在检测$(“#login”).submit()函数,因为我在那里有警报,它调用了它

我正在使用来构建文件,而不是我构建它们

我经常看到这种情况。但是,没有一个解决方案能帮到我。我有以下代码:

signin.js:

$(window).load(function() {


$('#login').submit(function(e){
    e.preventDefault();
    obj = $(this);
    un = $("input[name='user']").val();
    pass = $("input[name='pass']").val();
    $.ajax({
        url: https+"getUserDetails",
        data: {
            username: un,
            password: pass
        },
        dataType: "jsonp",
        crossDomain: true,
        type: "POST",
        jsonpCallback: "user",
        success: function(response, textStatus, jqXHR){
            if(response.exists){
                alert(response.access_token);
                window.localStorage.setItem("user", JSON.stringify({"name": response.name, "id": response.id, "token":response.access_token}, null));
                runController();
            }
            else{
                $("#er").show();
            }
        }
    });
    return false;
});

});
config.js:

addr = "domain.com"
api = "/api/v1/"
http = "http://"+addr+api
https = "https://"+addr+api
config.xml:

....
<access origin="*" subdomains="true" />

<feature name="http://api.phonegap.com/1.0/device" />
<feature name="http://api.phonegap.com/1.0/file" />
<feature name="http://api.phonegap.com/1.0/network" />

<preference name="phonegap-version" value="2.1.0" />
....
更新2

我在API控制器下禁用了CSRF令牌,因为它是不需要的,下面是在phonegap下执行ajax调用时服务器日志显示的内容

Started POST "/api/v1/getUserDetails" for .... at 2012-11-30 11:38:26 -0800
Processing by Api::V1::ApiController#user_details as JSON
Parameters: {"username"=>"user", "password"=>"[FILTERED]"}
Completed 406 Not Acceptable in 27ms (ActiveRecord: 0.4ms)

仍然得到406错误。下一步我应该尝试什么?

现在我们看到了问题的根源,您必须调试406。这里有几个链接解释了406的含义

基本上,您需要确保您的HTTP请求是随标头发送的,说明客户端(您的应用程序)将接受以服务器可以返回的方式格式化的响应。要使客户端和服务器就格式达成一致,可能需要客户端或服务器端进行更改。我对您正在使用的服务器一无所知,但您可以通过jquery修改ajax请求的Accepts头,如下所述


导致此错误的是我的RubyonRails端。我忘了,因为这是一个移动设备,所以我将格式修改为mobile。为了解决这个问题,我必须在api控制器中执行以下操作:

skip_before_filter :prepare_for_mobile

这解决了我的问题。

您是否有任何服务器端日志显示请求从未发送到那里?还可以添加一个错误函数,查看它是否收到调用,但没有收到200响应。同意上面的说法。将错误方法添加到ajax函数中。另外,确保回调方法确实存在于服务器上,因此它正在调用ajax函数,但返回错误406。当我在本地机器上做测试时,它工作正常。但是,不是生产服务器。为什么?你检查服务器端日志了吗?他们说了什么?@chrisvillanueva看更新1。你建议在Ajax设置中添加什么?我之所以这么说,是因为当在Chrome或其他设备下运行ajax命令时,它工作正常,并且完成了它应该做的事情。您是在Chrome中还是在模拟器/模拟器或设备上测试您的应用程序?Chrome可能会正确地创建请求,但在您看到此错误的情况下,情况似乎并非如此。至于需要进入Ajax的内容,安装程序将取决于您当前为Accept标头发送的请求以及服务器愿意返回的内容。我正在Chrome和真实设备中测试我的应用程序。
Started POST "/api/v1/getUserDetails" for .... at 2012-11-30 11:38:26 -0800
Processing by Api::V1::ApiController#user_details as JSON
Parameters: {"username"=>"user", "password"=>"[FILTERED]"}
Completed 406 Not Acceptable in 27ms (ActiveRecord: 0.4ms)
skip_before_filter :prepare_for_mobile