2010-05-07 9 views
22

Tengo una llamada de JavaScript Ajax (jQuery.ajax), que no ejecuta la función de devolución de llamada correcta.jQuery.ajax éxito de la función de devolución de llamada no ejecutada

$.ajax({ 
     url: target, 
     contentType: 'application/json; charset=utf-8', 
     type: 'POST', 
     // type: 'GET', 
     dataType: 'jsonp', 
     error: function (xhr, status) { 
      alert(status); 
     }, 
     success: function (result) { 
      alert("Callback done!"); 
      // grid.dataBind(result.results); 
      // grid.dataBind(result); 
     } 
    }); 

que veo en Firebug, que la solicitud se publica y el resultado correcto en términos de JSON se devuelve como se espera. ¿Qué está mal?

+3

Uno de los problemas que he visto que pueden causar que son escenario si la página alojada y el objetivo son ajax en diferentes dominios – artlung

+0

http://stackoverflow.com/questions/21368375/why-does-jquery-ajax-call-only-work-when-im-debugging-in-chrome esto funciona intentarlo que trabajó para mí –

Respuesta

44

Por muchas veces me he encontrado con problemas similares y la mayoría de las veces el motivo era un json malformado. Intente obtener el resultado como tipo de datos de texto para ver si este es su problema.

Además, me gustaría preguntar si está utilizando un parámetro como "& jsoncallback =?" en su url, ya que su tipo de datos es jsonp en lugar de simple json.

+8

Tuve el mismo tipo de problemas y, en su mayoría, está mal formado json. Valide su respuesta JSON en jsonlint.com – Adeel

+1

He validado, que es JSON válido. –

+1

json en lugar de jsonp lo resolvió. Gracias. –

5

Su $.ajax llamada con dataType: 'jsonp' podría trabajar en estos escenarios:

  1. está llamando a un URL en el mismo dominio de la página.
  2. está llamando a un URL de su dominio de la página que soporta callback

Si se encuentra fuera de estos dos casos, no se puede hacer nada ya que no se puede hacer este tipo de ataque XmlHttpRequest llama.

+0

realidad , usted puede; al menos en los navegadores modernos. No creo que $ .ajax maneje eso, sin embargo. – Tgr

+1

De todos modos, si fuera una solicitud entre sitios, la llamada AJAX no volvería en primer lugar. – Tgr

+0

@Tgr ¿Estás seguro? La llamada de dominio cruzado Jquery Ajax cambia a Jsonp, ¿sustituye el nombre de la función de devolución de llamada? en su parámetro de URL de devolución de llamada y llama a la url añadiendo una etiqueta

1

Esta es una vieja pregunta, pero sospecho que la gente todavía golpea esto.

Luché contra esto durante un tiempo, y finalmente me rendí y me mudé al modelo diferido. (He estado usando jQuery el tiempo suficiente para seguir con los hábitos "antiguos" ...) Tan pronto como cambié a un modelo diferido, las cosas empezaron a funcionar. No tengo idea de por qué la forma antigua no funcionó, pero ya no me importa. (Esta pregunta es anterior al nuevo modelo.)

cf. https://stackoverflow.com/a/14754681/199172

-1

La llamada de Jquery Ajax a un servlet con parámetros múltiples no llamaba al éxito o al error aunque la llamada fue exitosa. Estaba vinculado a un botón de enviar. Cambiarlo devolvió un evento de éxito.

Aquí está mi código de referencia en caso de que alguien lo necesite como referencia.

$(document).ready(function() {  
    $("#buttonSave").click(function() { 
     alert('incustsave'); 
     var name = $("#custname").val(); 
     var gstnumber = $("#gstnumber").val(); 
     var custbizname = $("#custbizname").val(); 
     var email = $("#email").val(); 
     var address = $("#address").val(); 
     var street = $("#street").val(); 
     var city = $("#city").val(); 
     var zip = $("#zip").val(); 
     var phone = $("#phone").val(); 
     var country = $("#ctry").val(); 

     var inputArray = [name, gstnumber, custbizname, email, address, street, city, zip, phone, country]; 
     var Success = false; 
     alert('added_button_and_dt'); 
     $.ajax({ 
      type: "POST", 
      url: "RegisterCustomerServlet",    
      data: {'input': inputArray}, 
      dataType: 'json', 

      success: function (data) { 
       alert('sucess'); 
      }, 
      error: function (e) { 
       alert('error'); 
      } 
     }); 
    }); 
}); 

HTML con Bootstrap3 (referencia botón)

<!-- Button --> 
<div class='wrapper text-center'> 
    <div class="btn-group"> 
     <button type="button" id="buttonSave" class="btn btn-primary">Save</button> 
    </div> 
</div> 

servlet Referencia

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    HashMap<String,String> map = new HashMap<String,String>(); 
    CustomerDAO custinfo = new CustomerDAO(); 
    Gson gson = new Gson(); 
    CustomerVO vo = new CustomerVO(); 

    String[] myJsonData = request.getParameterValues("input[]"); 
    logger.info("in custregisterjsoninput" + myJsonData[0] + myJsonData[2] + myJsonData[3] + myJsonData[4]); 

    map.put("custname", myJsonData[0]); 
    map.put("getsnumber", myJsonData[1]); 
    map.put("custbizname", myJsonData[2]); 

    map.put("email", myJsonData[3]); 
    map.put("address", myJsonData[4]); 
    map.put("street", myJsonData[5]); 
    map.put("city", myJsonData[6]);   
    map.put("pincode", myJsonData[7]); 
    map.put("mainphone", myJsonData[8]); 
    map.put("country", myJsonData[9]); 

    try { 
     vo = custinfo.saveCustomerInfo(map); 
    } catch (Exception e) { 
     logger.info("aftercall"+e.getMessage()); 
     throw new ServletException(e); 
    } 
    response.setContentType("application/json"); 
    response.setCharacterEncoding("UTF-8"); 
    response.getWriter().write(Utility.convertPOJOtoJason(vo)); 
} 
Cuestiones relacionadas