2015-02-12 112 views
0

我使用JQuery EasyUI的datagrid是一个非常基本的实现。JQuery EasyUI Datagrid与一个Web服务但不是另一个(相同的代码相同的服务器)

继续从我的previous SO post(我设法让JQuery EasyUI的datagrid使用JavaScript方法从我的webservice加载数据)。我现在有一个非常奇怪的问题,我不明白。

总之,一个web服务工作,另一个没有,但是代码是基本一致并且两个Web服务托管在同一台服务器上,并使用CORS所以我们没有相同的起源问题。我真的看不到代码和它们的执行之间有任何可见的区别。一个工作,另一个不工作...我只能假设它与服务器API响应有关,但是结构匹配,都是在同一个站点和同一个服务器上生成的......都很奇怪......我使用.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太代码遵循相同的结构。

此外提琴手表明,“得到”已请求和JSON的返回。那么,为什么会在网格显示了PushMessages API的数据,而不是预订API ...

Working JSON

Not working JSON

回答

0

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

+0

Cripes!是的,我现在在小提琴手看到这个。我想我真正的问题是为什么CORS不适合这个项目,但对另一个项目来说很好。我现在删除了引用,清理,重建,添加和重复,并重复检查所有在线资源,以确保我正确添加CORS - 尽管此标头仍缺少Access-Control-Allow-Origin值... – ChrisCurrie 2015-02-12 09:55:52

0

@Kyle提供了答案,为什么这是行不通的,但我想列出其他答案详细说明原因和分辨率。

这里有两个问题。

首先,我最初跟着this article第一个项目和所有运作良好。我曾掠过它的第二个项目,虽然我已经安装了通过NuGet包管理我没能添加行CORS:

// New code 
config.EnableCors(); 

在AppStart的WebApiConfig.cs

我这样做之后,所有的思维会很好,但它仍然无法工作。

我试图消除参考CORS,清洗,改造,将其添加并重复......仍然没有喜悦。然后我重新引用了包括CORS在内的整个Web API 2库,但仍然没有喜悦。我终于使用了包管理器控制台窗口,并在文本中注意到Json包需要依赖,这需要我重新启动Visual Studio。

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

另一个“疑难杂症”是我测试,看看现在CORS是造成访问控制允许来源标题以提琴手显示。不过,我是通过直接通过浏览器访问API的。这从来没有显示'Access-Control-Allow-Origin'标题,所以我被愚蠢地认为它仍然不起作用。我需要通过Web应用程序请求服务,才能看到Fiddler中出现'Access-Control-Allow-Origin'标题。

相关问题