由於某種原因,$ .ajax()沒有被調用。它正在檢測$(「#login」)。submit()函數,因爲我確實在那裏有警報,它會調用它。Ajax呼叫在PhoneGap上不起作用
我正在使用http://build.phonegap.com構建文件而不是構建它們。
我看到這個彈出很多。但是,沒有任何解決方案幫助我解決問題。我有這樣的代碼:
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" />
....
的index.html:
<!DOCTYPE html>
<html>
<head>
....
<title>Sign In</title>
<script type="text/javascript" src="js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="js/controller.js"></script>
<script type="text/javascript" src="cordova-2.2.0.js"></script>
<script type="text/javascript" src="js/signin.js"></script>
....
</head>
<body>
....
<form id="login" action="#">
<h2 class="form-signin-heading">Please sign in</h2>
<input type="text" class="input-block-level" placeholder="Email address" name="user">
<input type="password" class="input-block-level" placeholder="Password" name="pass">
<label class="checkbox">
<input type="checkbox" value="remember-me"> Remember me
</label>
<button class="btn btn-large btn-primary" type="submit">Sign in</button>
</form>
....
</body>
</html>
更新1
這裏是服務器日誌顯示:
Started POST "/api/v1/getUserDetails" for .... at 2012-11-29 20:38:22 -0800
Processing by Api::V1::ApiController#user_details as JSON
Parameters: {"username"=>"user", "password"=>"[FILTERED]"}
WARNING: Can't verify CSRF token authenticity
Completed 406 Not Acceptable in 15ms (ActiveRecord: 2.9ms)
更新2
我禁用CSRF在我的API控制標記,因爲它不需要在這裏是什麼我的服務器日誌顯示在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錯誤。接下來我應該嘗試什麼?
您是否有任何服務器端日誌顯示請求永遠不會使它在那裏?也可以添加一個錯誤函數來查看它是否獲得了呼叫,但它沒有收到200響應。 –
同意以上。向ajax函數添加一個錯誤方法。另外,確保服務器上實際存在回調方法。 – chrisvillanueva
所以它調用了ajax函數,但是我收到了錯誤406。當我在本地機器上做過測試時,它可以正常工作。但是,不是生產服務器。爲什麼? –