Estoy usando la cuadrícula de datos de JQuery EasyUI es una implementación muy básica.

A raíz de mi publicación SO anterior (donde logré obtener la cuadrícula de datos de JQuery EasyUI para cargar datos desde mi servicio web utilizando el enfoque de JavaScript). Ahora tengo un problema muy extraño que no puedo entender.

En resumen, un servicio web funciona, otro no, pero el código es básicamente idéntico y ambos servicios web están alojados en el mismo servidor y usan CORS, por lo que no tenemos los mismos problemas de origen. Realmente no puedo ver ninguna diferencia visible entre el código y su ejecución. Uno funciona, el otro no ... Solo puedo asumir que es algo que tiene que ver con la respuesta de la API del servidor, pero la estructura coincide, ambos se generan en el mismo sitio y en el mismo servidor ... todo muy extraño ... Estoy usando .NET Web API 2 para generar el JSON.

Aquí está la versión de trabajo:

<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>

Aquí está el código que no

<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>

Como puede ver, ambos siguen el mismo marcado y cuando veo el servicio web JSON, también sigue la misma estructura.

Además, Fiddler muestra que se realizó la solicitud 'get' y que se devolvió el JSON. Entonces, ¿por qué la cuadrícula mostrará los datos de la API PushMessages y no la API de reservas? ...

Working JSON

Not working JSON

0
ChrisCurrie 12 feb. 2015 a las 11:35

2 respuestas

La mejor respuesta

El encabezado de respuesta que no funciona no permite CORS; falta el encabezado Access-Control-Allow-Origin

0
SWa 12 feb. 2015 a las 09:03

@Kyle proporcionó la respuesta de por qué esto no funcionaba, pero quería enumerar otra respuesta que detallara la causa y la resolución.

Aquí hubo dos problemas.

En primer lugar, seguí este artículo inicialmente para el primer proyecto y todo funcionó bien. Lo había hojeado para el segundo proyecto y, aunque había instalado CORS a través de Nuget Package Management, no había podido agregar la línea:

// New code
config.EnableCors();

En AppStart WebApiConfig.cs

Después de hacer esto, pensando que todo estaría bien, todavía no funcionó.

Intenté eliminar la referencia a CORS, limpiar, reconstruir, agregarlo y repetir ... todavía no hay alegría. Luego volví a hacer referencia a toda la biblioteca Web API 2, incluido CORS, y todavía no me alegré. Finalmente usé la ventana de la consola del administrador de paquetes y noté en el texto que había una dependencia en un paquete Json que necesitaba que reiniciara Visual Studio.

Hice esto y luego comenzó a funcionar.

Otro 'Gotcha' fue que estaba probando para ver si CORS ahora estaba causando que el encabezado Access-Control-Allow-Origin se mostrara en Fiddler. Sin embargo, lo estaba haciendo accediendo a la API directamente a través de mi navegador. Esto nunca mostró el encabezado 'Access-Control-Allow-Origin', por lo que me engañaron al creer que todavía no funcionaba. Necesitaba solicitar el servicio a través de la aplicación web para que el encabezado 'Access-Control-Allow-Origin' apareciera en Fiddler.

0
ChrisCurrie 12 feb. 2015 a las 10:28