0

所以我开始使用 PhoneGap/Cordova(Windows 手机)和 WCF 休息服务,但是,我在让模拟器与 WCF 服务交互时遇到问题。

起初我在想可能是模拟器无法连接到本地 WCF 服务,所以我在外部主机上发布了 WCF 服务,但是问题仍然存在……即仍然无法调用 WCF 服务。

我的代码如下所示:

PhoneGap 应用程序的 javascript 文件如下:

function getAjax() {
var jqxhr = $.ajax({
    url: 'http://link.to.service.com/service1/',
    //headers:
    beforeSend: function (xhr) {
        //xhr.overrideMimeType('text/plain; charset=x-user-defined');
    },
    dataType: 'json'
})
.done(function (data) {
    var element = document.getElementById('ajaxCall');
    element.innerHTML = JSON.stringify(data, null, "\t");
})
 .fail(function (xhr, status, error) {
     showError(error);
 })
 .always(function () { showAlert("complete"); });

}

然后 WCF 服务包含以下方法:

 [WebGet(UriTemplate = "")]
    public List<SampleItem> GetCollection()
    {
        return new List<SampleItem>()
                   {
                       new SampleItem()
                       {
                           Id = 1,
                           StringValue = "Hello" }
                   };
    }

因此,当对 javascript 方法“getAjax”的调用完成时,应该调用 WCF 服务方法,但是它会继续进入失败函数,而不是显示错误消息“未定义”。

我在这里错过了什么吗?

4

1 回答 1

1

经过进一步调查,已使用以下行解决了此问题:

jQuery.support.cors = true;

对于那些有同样问题的人来说,这只是来自 jQuery 库的一小段引用,这就是上面的行所做的:

如果浏览器可以创建 XMLHttpRequest 对象并且该 XMLHttpRequest 对象具有 withCredentials 属性,则 cors 等于 true。要在尚不支持 cors 但允许跨域 XHR 请求(windows gadget 等)的环境中启用跨域请求,请设置 $.support.cors = true;。CORS WD

于 2012-06-27T07:34:19.587 回答