varias paginas pagina mostrar mientras funcion externo ejecutar div cargar carga asincrona antes javascript jquery ajax rest

paginas - funcion load javascript



¿Por qué mi manejador de botones jQuery no está siendo activado? (5)

Tengo este jQuery para responder a un botón al que se hace clic y llamar a un método REST:

$(document).ready(function() { $("#btnGetData").click(function() { alert("The button was clicked."); var unitval = _unit; var begdateval = _beginDate; var enddateval = _endDate; var model = JSON.stringify({ unit: unitval, begdate: begdateval, enddate: enddateval }); $.ajax({ type: ''GET'', url: ''@Url.Action("GetQuadrantData", "LandingPage")'', data: { unit: unitval, begdate: begdateval, enddate: enddateval}, contentType: ''application/json'', cache: false, success: function (returneddata) { }, error: function () { alert(''hey, boo-boo!''); } }); }); // button click }); // ready

No se trata simplemente de que no se llame al método REST, aparentemente este controlador no se activa en absoluto, ya que no veo alertas (ni " Se hizo clic en el botón " ni "¡ Hola, abucheo! ").

Se está agregando el guión: puedo pasar por él y los vars (como "unitval") tienen asignados los valores apropiados.

Entonces, ¿por qué hacer clic en el botón, que se declara así:

<button class="btn green smallbutton" id="btnGetData" name="btnGetData">SUBMIT</button>

...¿hacer nada?

Esta es la secuencia de comandos que se agrega (desde Ver> Origen de la página):

<script>$(document).ready(function() {$("#btnGetData").click(function() {alert("The button was clicked.");var unitval = ABUELOS;var begdateval = 2016-08-21;var enddateval = 2016-08-27;var model = JSON.stringify({ unit: unitval, begdate: begdateval, enddate: enddateval });$.ajax({type: ''GET'',url: ''@Url.Action("GetQuadrantData", "LandingPage")'',data: { unit: unitval, begdate: begdateval, enddate: enddateval},contentType: ''application/json'',cache: false,success: function (returneddata) {},error: function () {alert(''hey, boo-boo!'');}});});});</script>

Esto puede no ser pertinente (aún, de todos modos), pero este es el método REST que deseo llamar desde ese botón, haga clic en:

public class LandingPageController : ApiController . . . [Route("{unit}/{begdate}/{enddate}")] public HttpResponseMessage GetQuadrantData(string unit, string begdate, string enddate) { _unit = unit; _beginDate = begdate; _endDate = enddate; string beginningHtml = GetBeginningHTML(); // This could be called from any page to reuse the same "header" string top10ItemsPurchasedHtml = GetTop10ItemsPurchasedHTML(); string pricingExceptionsHtml = GetPricingExceptionsHTML(); string forecastedSpendHtml = GetForecastedSpendHTML(); string deliveryPerformanceHtml = GetDeliveryPerformanceHTML(); string endingHtml = GetEndingHTML(); String HtmlToDisplay = string.Format("{0}{1}{2}{3}{4}{5}", beginningHtml, top10ItemsPurchasedHtml, pricingExceptionsHtml, forecastedSpendHtml, deliveryPerformanceHtml, endingHtml); return new HttpResponseMessage() { Content = new StringContent( HtmlToDisplay, Encoding.UTF8, "text/html" ) }; }

ACTUALIZAR

Este es un volcado de error desde la consola:

Failed to find a valid digest in the ''integrity'' attribute for resource ''https://code.jquery.com/jquery-1.12.4.min.js'' with computed SHA-256 integrity ''ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=''. The resource has been blocked. Uncaught Error: Bootstrap''s JavaScript requires jQuery Failed to load resource: the server responded with a status of 404 (Not Found) Uncaught Error: Bootstrap''s JavaScript requires jQuery Uncaught ReferenceError: $ is not defined Failed to load resource: the server responded with a status of 404 (Not Found)

ACTUALIZACIÓN 2

Estoy agregando jQuery; Tengo esto en mi sección de "cabeza":

<script src=''https://code.jquery.com/jquery-1.12.4.min.js'' integrity=''sha256-lZFHibXzMHo3GGeehn1hudTAP3Sc0uKXBXAzHX1sjtk='' crossorigin=''anonymous''></script> <link href=''https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css'' rel=''stylesheet'' /> <script src=''https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js''></script>

ACTUALIZACIÓN 3

Al incorporar algunas de las sugerencias aquí, esta es la fuente de mi página en ejecución (botón que aún no responde):

Informes disponibles para ABUELOShttps: //maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css ''rel ='' stylesheet ''/>https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/ js / bootstrap.min.js ''> body {padding-top: 20px; relleno-bottom: 20px; background-color: blanco;} hr {border: 0; height: 1px; color: navy; background: # 333; margin -izquierda: -4; margen-derecha: -4;} tabla {font-family: arial, sans-serif; font-size: 13px; border-collapse: colapso; ancho: 100%;} td, th {border: 1px sólido #dddddd; text-align: left; padding: 8px;} label {white-space: pre; } tr: nth-child (par) {background-color: #dddddd;}. body-content {-webkit-box-shadow: -1px 0 5px 0 # 000000; -webkit-box-shadow: -1px 0 5px 0 rgba (0, 0, 0, .25); box-shadow: -1px 0 5px 0 # 000000; box-shadow: -1px 0 5px 0 rgba (0, 0, 0, .5); relleno-izquierda: 1px ; relleno-derecho: 1px; relleno-inferior: 15px;}. jumbotronjr {relleno: 2px; margen-superior: -12px; margen-inferior: -24px; tamaño de letra: 21px; font-weight: 200; color: inherit ; color de fondo: blanco;}. titletext {font-size: 2.1em; color: darkgreen; font-family: Candara, Calibri, Cambria, serif; margen-izquierdo: -32px;}. titletextjr {font-size: 1.4 em; color: verde oscuro; familia de fuentes: Candara, Calibri, Cambria, serif; margen-izquierda: -32px;}. cccsfont {font-size: 0.25em! important; familia de fuentes: Calibri, Candara, Cambria, serif! importante;}. smalldatepicker {font-size: 12px; font-weight: 100;}. smallbutton {font-size: 11px; font-weight: 100; margin-left: 16;}. addltopmargin {margin-top: 8px; } .sectiontext {font-size: 1em; font-weight: bold; font-family: Candara, Calibri, Cambria, serif; colo r: verde; margin-top: -4px;}. bottommarginbreathingroom {margin-bottom: 2px;}. submitbtnmargins {margin-top: -4px! importante; margin-left: 8px! important; margin-bottom: 8px;}. btn.green {background-color: darkgreen; color: white;}. redfont {color: red;}, bold {font-weight: bold;}. rightjustifytext {text-align: right;}. topleft {margin-top: -8px; margen-izquierdo: 12px; margen-inferior: 8px; relleno: 16px; borde: 1px sólido negro;}. Topright {margen-superior: -8px; margen-derecho: 12px; margen-inferior: 8px; margen- left: -12px; relleno: 16px; borde: 1px negro sólido;}. bottomleft {margen-izquierdo: 12px; relleno: 16px; borde: 1px negro sólido;}. bottomright {margen-derecho: 12px; margen-izquierdo: - 12px; relleno: 16px; borde: 1px negro sólido;}. Aight, .topleft {height: 408px; } .bottomright, .bottomleft {height: 408px; } .leftmargin12 {margin-left: 12px! important;} Customer Dashboard
ABUELOS para la semana del 21 de agosto para IR

Los 10 artículos más importantes adquiridosCódigo de elementoDescripciónQty156100ONIONES, AMARILLO JUMBO 50 # 362226150AVOCADOS, ABUELOS-HASS 70CT 23 # 358163150PIPOTES, ANAHEIM VERDE 20 # 282176000 PATATAS, ROJO A 50 # 266188301TOMATOS, ROMA CASA CALIENTE 25 # 230167150PRODUCTORES, POBLANO 18 - 20 # 202189300TOMATILLOS, 30 # NO HUSK168170150PEPPERS , GRN CH 1 y 1/9 BU (18-26 #) 163122500LETTUCE, ICEBERG LINER 24 CT133127100LETTUCE, ROMAINE 24 CT 129 Excepciones de pago - Recuento semanalRed denota excedentes de los artículos del contratoPara Weyand en la semana de fijación de precios del - 7/31 / 2016PRO ACT MemberOcurrencias totales de ítems resumidosTotal Resumen ExcepcionesTotal Porcentaje de excepciones de resumenStern205299.02% Hardies Dallas1,5970100.00% Hardies South612199.84% Va Fresh4820100.00% Segovias1,360299.85% Papa Spec1,6050100.00% TOTAL5,861599.79% Gasto pronosticado - $ 9,814.81Código del artículoÚltimo uso semanalEl precio de esta semanaExpensado gastado261650493.14153.86231083521 .2565.00398980464.95227.70351135400.7530.00398036423.00126.00208110422.50105.0010280018352.254,128.7536705019101.953,724.501 731006619.001,254.00TOTAL4082 - $ 9,814.81Rendimiento de entregaPRO ACT Distribuidor Ubicación del restaurante Importe de pedido de la ordenAvg Recuento de paquetesSoluciones totalesSalida FLA1A ALEWORKS - # 4405 - ST. AUGUSTINE $ 475.7828.50 $ 1,903.10Crucero de vuelo TABERNA DE AVIONES - # 4404 - PLAYA ATLÁNTICA $ 221.4617.50 $ 885.82Salida PUENTES DE FLECE - # 4403 - JACKSONVILLE $ 367.4922.67 $ 1,102.47T & RÍO TBIG - # 4201 - CHATTANOOGA $ 396.0622.83 $ 2,376.34T & RÍO TBIG - # 4205 - HAMILTON PL $ 424.7426 .00 $ 1,698.95TOTAL3,770.4223.50 $ 1,592.60window.onload = function () {var btnGetData = document.getElementById (''btnGetData''); btnGetData.addEventListener ("click", function () {alerta ("Twerking ...") ; var unitval = ABUELOS; var begdateval = 2016-08-21; var enddateval = 2016-08-27; var model = JSON.stringify ({unit: unitval, begdate: begdateval, enddate: enddateval}); $. ajax ( {type: ''GET'', url: ''@ Url.Action ("GetQuadrantData", "LandingPage")'', datos: {unit: unitval, begdate: begdateval, enddate: enddateval}, contentType: ''application / json'', cache : falso, éxito: función (datos devueltos) {}, error: función () {alerta (''¡ey, boo-boo!'');}});});

ACTUALIZACIÓN 4

Solo para tratar de verificar que el problema es que estoy creando dinámicamente el html (y javascript) con C #, agregué el script al archivo Index.cshtml (que es la página inicial y no se modifica en el tiempo de ejecución):

. . . </style> <script> $(function () { var btnGetData = document.getElementById(''btnGetData''); btnGetData.addEventListener("click", function () { alert("It works"); var unitval = ''Abuelos''; var begdateval = ''2016-08-07''; var enddateval = ''2016-08-13''; $.ajax({ type: ''GET'', url: ''@Url.Action("GetQuadrantData", "LandingPage")'', data: { unit: unitval, begdate: begdateval, enddate: enddateval }, contentType: ''application/json'', cache: false, success: function (returneddata) { }, error: function () { alert(''hey, boo-boo!''); } }); }); }); </script> </head> . . .

Aquí está el método en LandingPageController: clase de ApiController que estoy tratando de llamar con ese AJAX:

[Route("{unit}/{begdate}/{enddate}")] public HttpResponseMessage GetQuadrantData(string unit, string begdate, string enddate) { _unit = unit; . . .

Al hacer esto, veo la alerta "Funciona", y luego el "¡Hola, abucheo!" también, desde el botón javascript, haga clic en controlador de eventos. El punto de interrupción en la "unidad = unidad" nunca se alcanza Es por eso que veo el mensaje de "boo-boo", creo, pero no sé por qué no se está llegando.

ACTUALIZACIÓN 5

Los argumentos Url.Action aún se están transformando / traduciendo incorrectamente; en las herramientas de desarrollo de Chrome muestra:

<script> $(document).ready(function () { $("#btnGetData").click(function () { $.ajax({ type: ''GET'', url: ''/LandingPage/GetQuadrantData'', console.log(url); data: {unit: unitval, begdate: begdateval, enddate: enddateval}, contentType: ''text/plain'', cache: false, xhrFields: { withCredentials: false }, success: function(returneddata) { alert(''Successful: '' + returneddata); }, error: function() { alert(''hey, boo-boo!''); } }); // ajax }); // button click }); // ready </script>

...así que esto:

url: ''@Url.Action("GetQuadrantData", "LandingPage")'',

... se ve en CDT como esto:

url: ''/LandingPage/GetQuadrantData'',

... y no estoy llegando al punto de interrupción que se establece en la última línea a continuación:

[System.Web.Http.Route("{unit}/{begdate}/{enddate}")] [System.Web.Http.HttpGet] public HttpResponseMessage GetQuadrantData(string unit, string begdate, string enddate) { _unit = unit;

ACTUALIZACIÓN 6

Estaba tropezando con esta línea en medio de la llamada ajax:

console.log(url);

... pero incluso cuando lo eliminé para que jQuery se convirtiera en esto (agregando algunos valores de datos aleatorios a los argumentos / datos):

$(document).ready(function () { $("#btnGetData").click(function () { $.ajax({ type: ''GET'', url: ''@Url.Action("GetQuadrantData", "LandingPage")'', data: {unit: ''ABUELOS'', begdate: ''2016-08-25'', enddate: ''2016-08-31''}, contentType: ''text/plain'', cache: false, xhrFields: { withCredentials: false }, success: function(returneddata) { console.log(''Successful: '' + returneddata); }, error: function() { console.log(''hey, boo-boo!''); } }); // ajax }); // button click }); // ready

... Sigo recibiendo el mensaje "boo-boo" escrito en la consola y el punto de corte en mi controlador no se ve afectado, presumiblemente porque la URL incorrecta se está generando a través del método Url.Action ().

ACTUALIZACIÓN 7

Si modifico / experimentalmente, modifico la llamada ajax a esto, reemplazando la Url.Acción y los datos con la URL en bruto:

$(document).ready(function () { $("#btnGetData").click(function () { $.ajax({ type: ''GET'', url: ''http://localhost:52194/api/ABUELOS/2016-08-21/2016-08-27'', contentType: ''text/plain'', cache: false, xhrFields: { withCredentials: false }, success: function(returneddata) { console.log(''Successful: '' + returneddata); }, error: function() { console.log(''hey, boo-boo!''); } }); // ajax }); // button click }); // ready

Llego al punto de interrupción en el Controlador, pero la URL de la página no cambia y los datos (html) en la página no se actualizan.

Por cierto, cambié la referencia de jquery a esto, ya que nyedidikeke me recomendó:

<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>

ACTUALIZACIÓN 8

Con esto (después de mover las referencias javascript a la parte inferior, justo arriba de "" BTW):

. . . </style> <script> $(document).ready(function () { $("#btnGetData").click(function () { $.ajax({ type: ''GET'', url: ''@Url.Action("GetQuadrantData", "LandingPage")'', data: { unit: ''ABUELOS'', begdate: ''2016-08-25'', enddate: ''2016-08-31'' }, contentType: ''text/plain'', cache: false, xhrFields: { withCredentials: false }, success: function(returneddata) { console.log(''Successful: '' + returneddata); }, error: function() { console.log(''hey, boo-boo!''); } }); // ajax }); // button click }); // ready </script> </head> . . .

... Lo consigo en la consola de Chrome Dev Tools:

http://localhost:52194/LandingPage/GetQuadrantData?unit=ABUELOS&begdate=2016-08-25&enddate=2016-08-31&_=1473095349071 Failed to load resource: the server responded with a status of 404 (Not Found) hey, boo-boo!

ACTUALIZACIÓN 9

Este es mi método de registro en / App_Start / WebApiConfig.cs:

public static void Register(HttpConfiguration config) { config.Routes.Clear(); // added this 9/2/2016 at suggestion from http://www.codemag.com/article/1601031 config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); // I don''t know if this is where this should go (from http://stackoverflow.com/questions/34626483/how-to-pass-datatable-via-frombody-to-web-api-post-method-c) config.Formatters.Add(new DataTableMediaTypeFormatter()); config.Formatters.Add(new GenericProduceUsageListMediaTypeFormatter()); }

¿Hay algo mal aquí?


Amigo, una pregunta: ¿estás seguro de que incluiste la biblioteca jquery correctamente?

Intenté esto y funcionó

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function () { $("#btnGetData").click(function () { alert("The button was clicked."); }); // button click }); // ready </script>


Tu código funciona para mí: http://codepen.io/danielvaughn/pen/jrNoko

¿Estás seguro de que estás importando jQuery correctamente? De lo contrario, ejecute algunas funciones jquery en su consola para asegurarse de que funciona.

<button class="btn green smallbutton" id="btnGetData" name="btnGetData">SUBMIT</button>


Agregar un tipo de botón como este si envía un formulario:

<button type="submit" class="btn green smallbutton" id="btnGetData" name="btnGetData">SUBMIT</button>

ACTUALIZAR

Desde su "Actualización 2", cambie la primera línea a esta:

<script src=''https://code.jquery.com/jquery-1.12.4.min.js'' integrity=''sha256-lZFHibXzMHo3GGeehn1hudTAP3Sc0uKXBXAzHX1sjtk='' crossorigin=''anonymous''></script>

a esto:

<script src=''https://code.jquery.com/jquery-1.12.4.min.js''></script>

no es necesario que verifiquemos la integridad del archivo jquery aquí, por lo que al eliminar eso podrá ejecutar jquery sin ningún error. Gracias


Para alcanzar con éxito el evento de clic en su botón, primero debe abordar los problemas informados en su consola (principalmente error de ''integrity'' recursos).

Comencemos resolviendo el error de integridad del Subresource:

Abre tu línea de comando con openssl en la ubicación del archivo jQuery y ejecuta:

gato FILENAME.js | openssl dgst -sha384 -binary | openssl enc -base64 -A

donde, FILENAME.js es el nombre de su archivo jQuery (ya sea: jquery.min.js, en su caso).

o

haga uso de SRI Hash Generator (proporcionando el URL al script de red de entrega de contenido deseado (CDN) y haciendo clic en el botón HASH) para generar un hash de Integridad de Subresource (SRI) .

Como tal, su resultado esperado debería ser el siguiente:

<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>

Nota: El atributo de integridad permite que los navegadores verifiquen y se aseguren de que su archivo de recursos referenciado no se cargue si su contenido difiere de lo que solía ser en el momento de la generación de hash SRI.

A continuación, debe considerar una migración tras error elegante alojando una copia del archivo jQuery en su servidor para usarlo si el contenido de la versión de CDN referenciada ha sido alterado.

Compruebe si jQuery se ha definido y haga referencia a su failover si no lo ha hecho.

<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script> <script>window.jQuery || document.write(''<script src="path/to/jquery-1.12.4.min.js"><//script>'')</script>

Recuerde cumplir con este orden de prioridad al hacer referencia a sus archivos JavaScript (JS):

  1. biblioteca jQuery,
  2. Bootstrap JS archivo, entonces
  3. su archivo JS personalizado, debería haberlo.

Nota: sus referencias JS DEBERÍAN estar preferiblemente ubicadas al final del contenido de su página, antes del cierre de la etiqueta corporal ( </body> ).

Una vez aplicadas las soluciones anteriores, accederá con éxito a su consola: The button was clicked. cuando haces clic en el botón (consulta los fragmentos a continuación).

Su botón:

<button class="btn btn-success btn-sm" id="btnGetData" name="btnGetData">SUBMIT</button>

Tu guión:

<!-- jQuery approach --> $(document).ready(function() { $("#btnGetData").click(function() { console.log("The button was clicked."); }); // button click }); // ready <!-- or --> <!-- Pure JavaScript approach --> window.onload = function() { var btnGetData = document.getElementById(''btnGetData''); btnGetData.addEventListener("click", function () { console.log("The button was clicked."); }); // button click }; // ready

Tanto el enfoque jQuery como el JavaScript puro ahora pueden funcionar y le permiten llegar a su botón mientras ejecuta una prueba de integridad en su recurso externo deseado (biblioteca jQuery) y esto, con una elegante opción de conmutación por error, para avanzar.

Nota: el enfoque jQuery estaba fallando porque la biblioteca jQuery no se declaró debido al hecho de que su verificación SRI falló sin una conmutación por error disponible para seguir cargando una biblioteca jQuery. Eso no responde ni a The button was clicked. ni hey, boo-boo! ser alcanzado con éxito para un evento de clic en el botón y / o un evento de clic hasta su función de error jQuery AJAX.

contentType: ''text/plain'' uso, use contentType: ''text/plain'' en su jQuery AJAX call en lugar de contentType: ''application/json'' ya que espera HTML puro , no una respuesta JSON y establece withCredentials: false (a menos que su servidor responda con el encabezado ) como propiedad adicional bajo la declaración xhrFields (consulte los fragmentos a continuación).

xhrFields: { withCredentials: false },

En resumen:

$.ajax({ type: ''GET'', url: ''@Url.Action("GetQuadrantData", "LandingPage")'', // Should you face any escape character challenge, use ''url'' with @Html.Raw() //url: ''@Html.Raw(@Url.Action("GetQuadrantData", "LandingPage"))'', console.log(url); data: {unit: unitval, begdate: begdateval, enddate: enddateval}, contentType: ''text/plain'', cache: false, xhrFields: { withCredentials: false }, success: function(returneddata) { console.log(''Successful: '' + returneddata); }, error: function() { console.log(''hey, boo-boo!''); } });


Pruébelo, simplemente usa JS vainilla para configurar su oyente y luego se encarga del resto con jQuery.

En la página de prueba que hice, estaba recibiendo mi alerta bien.

window.onload = function() { var btnGetData = document.getElementById(''btnGetData'') btnGetData.addEventListener("click", function() { alert("Twerking..."); var unitval = _unit; var begdateval = _beginDate; var enddateval = _endDate; var model = JSON.stringify({ unit: unitval, begdate: begdateval, enddate: enddateval }); $.ajax({ type: ''GET'', url: ''@Url.Action("GetQuadrantData", "LandingPage")'', data: { unit: unitval, begdate: begdateval, enddate: enddateval }, contentType: ''application/json'', cache: false, success: function(returneddata) {}, error: function() { alert(''hey, boo-boo!''); } }); }); // button click }