JQuery EasyUI Datagrid适用于一个Web服务但不适用于另一个(相同代码相同的服务器)

时间:2015-02-12 08:35:51

标签: jquery json asp.net-web-api jquery-easyui

我正在使用JQuery EasyUI< datagrid是一个非常基本的实现。

继续我的previous SO post(我设法让JQuery EasyUI的数据网格使用JavaScript方法从我的webservice加载数据)。我现在有一个我无法理解的奇怪问题。

简而言之,一个Web服务正常工作,另一个Web服务不起作用,但代码基本相同,并且两个Web服务都托管在同一台服务器上并使用CORS,因此我们没有相同的原始问题。我真的看不出代码和执行之间有任何明显的区别。一个工作,另一个不工作......我只能假设它与服务器API响应有关但结构匹配,都是在同一个站点和同一个服务器上生成的...都非常奇怪...我和#39;使用.NET Web API 2输出JSON。

这是工作版本:

<table id="DGInProgress" class="easyui-datagrid"
        data-options="singleSelect:true,collapsible:true,url:'https://www.driverlive.co.uk/rest/api/PushMessage/GetPushDriverMessagesList?DeviceId=a99f8a977696bfb9&DateFrom=2014-10-27T00:00:00&DateTo=2015-11-11T00:00:00',method:'get'">
    <thead>
        <tr>
            <th data-options="field:'MessageDated',width:80">Dated</th>
            <th data-options="field:'PushNotificationMessage',width:100">Message</th>
        </tr>
    </thead>
</table>

这里的代码不是

<table id="DGInProgress" class="easyui-datagrid"
        data-options="singleSelect:true,collapsible:true,url:'https://www.driverlive.co.uk/dispatch/api/BookingsInProgressLite/GetBookingsLite?dateTimeFrom=2014-01-01&dateTimeTo=2015-03-01&limit=100&json=true',method:'get'">
    <thead>
        <tr>
            <th data-options="field:'BookingReference',width:80">BookingReference</th>
        </tr>
    </thead>
</table>

如您所见,两者都遵循相同的标记,当我查看Web服务JSON时,它也遵循相同的结构。

此外,Fiddler表示&#39; get&#39;请求已经完成并且返回了JSON。那么为什么网格会显示PushMessages API而不是Bookings API的数据?...

Working JSON

Not working JSON

2 个答案:

答案 0 :(得分:0)

非工作响应标头不允许CORS - 它缺少Access-Control-Allow-Origin标题

答案 1 :(得分:0)

@Kyle提供了为什么这不起作用的答案,但我想列出另一个答案,详细说明原因和解决方案。

这里有两个问题。

首先,我最初跟随this article进行了第一个项目,一切运作良好。我已经为第二个项目浏览了它,虽然我通过Nuget Package Management安装了CORS但我没有添加该行:

// New code
config.EnableCors();

在AppStart WebApiConfig.cs

在我这样做之后,认为一切都没问题,但它仍然没有用。

我尝试删除对CORS的引用,清理,重建,添加并重复......仍然没有快乐。然后,我重新引用了整个Web API 2库,包括CORS,但仍然没有任何乐趣。我最后使用了包管理器控制台窗口,并在文本中注意到需要我重新启动Visual Studio的Json包依赖。

我做了这个,然后开始工作。

另一个&#39; Gotcha&#39;是我正在测试,看看CORS现在是否导致在Fiddler中显示Access-Control-Allow-Origin标头。但是我这样做是通过我的浏览器直接访问API。这从未显示出“访问控制 - 允许 - 来源”#39;标题所以我被愚弄相信它仍然无法正常工作。我需要通过网络应用程序请求服务,以便查看“访问控制 - 允许 - 来源”#39;标题出现在Fiddler中。