我正在設計一個Android應用程序使用PhoneGap,它基本上調用一個Web服務,現在它將包含一個方法,返回一些東西(讓我們說一個字符串)作爲返回值。最後,我希望Web服務處理針對我的Windows Azure數據庫的查詢。PhoneGap應用程序和WCF服務在不同的域
我對Web服務的選擇是啓用Ajax的WCF服務。這是正確的選擇嗎?
我試了一個簡單的應用程序,看看它是如何工作的。首先,我在Visual Studio中創建了一個新項目,然後創建了一個啓用Ajax的WCF服務。我添加了一個簡單的方法:
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat= WebMessageFormat.Json)]
public string GetName()
{
return "Hello world";
}
我根本沒有修改Web.config。
然後,我打開Eclipse並創建了一個只帶有文本框和按鈕的新的PhoneGap Android應用程序。每次,單擊此按鈕,web服務將被調用和返回值會通過以下方法來顯示在文本框中:
$('#button').click(function(){
$.ajax({
type: "GET",
url: "http://localhost:11634/MobileService.svc/GetName",
contentType: "application/json",
dataType: "json",
success: function (result) {
$("#textbox").text(result);
},
error: function (textStatus) {
$("#textbox").text(textStatus);
}
});
});
當我試圖用這個方法,我得到以下錯誤火狐:"NetworkError: 405 Method Not Allowed
。然後我嘗試將數據類型更改爲jsonp
,並在AJAX調用之前添加以下行以允許跨域請求: $.support.cors = true;
。現在在Firefox中,我得到這個錯誤:
能否請您指導我,我是否還是我沒有使用正確的方法和如何處理跨域問題嗎?
我仍然得到無效的標籤錯誤,即使我做了一個jsonpCallback。 – user1135357
您可以使用Firefox或Chrome轉到上面的localhost url,然後使用調試器(Firefox中的Firebug或Chrome中的開發人員工具)來顯示JSON響應的外觀?這聽起來像是返回的JSON中有一些無效。 – mccannf
如果響應的格式不是有效的,那麼您的Web.config可能需要更改爲JSONP,或者您可能需要爲該服務創建特定的工廠。請參閱此問題的答案:http://stackoverflow.com/questions/9882857/wcf-4-jsonp-and-jquery-cause-parsererror – mccannf