2012-03-30 6 views
0

Ich bin ein seltsames Verhalten mit diesem Code mit:merkwürdige Ausgabe mit jQuery.get()

<script type="text/javascript"> 
      function get() 
      { 
       alert("gggg"); 
       jQuery.get (
        "http://localhost:8080/c/portal/json_service", 
        { 
         serviceClassName: "com.liferay.test.service.TrabajadorServiceUtil", 
         serviceMethodName: "findByName", 
         servletContextName: "TrabajadorPlugin-portlet", 
         serviceParameters: "[param]", 
         param : document.getElementById("nombre") 
        } 
       ); 
      } 
</script> 

<div> 
<form> 
    <input type="text" id="nombre" value="<%=searching%>"/> 
    <input type="button" value="Submit" onClick="javascript:get()"/> 
</form> 
</div> 

Liferay Portal blockiert wird, wenn die Schaltfläche „Senden“ gedrückt wird. Das Popup-Fenster mit der Meldung "gggg" wird angezeigt, aber nachdem Sie darauf geklickt haben, wird die Seite blockiert.

Wenn ich die Zeile 'param: document.getElementById ("nombre") lösche, wird sie nicht blockiert.

Kann mir jemand erklären, wo ist der Fehler oder der Grund für dieses Verhalten?

Vielen Dank im Voraus,

Rafa

+1

Sollte sein 'document.getElementById ("nombre"). Value', aber ich bin nicht sicher, ob das den Ausfall verursacht. – Niko

+0

was willst du in deine 'param' Variable schreiben? –

+0

Was meinst du mit blockiert? –

Antwort

4

Das Problem ist, dass man ein ganzes DOM-Element als Wert für param passieren ist versucht, die jQuery gehen ist nicht wie. Welcher Elementtyp hat die ID nombre und welche Eigenschaft von diesem Element möchten Sie? Wenn es irgendeine Art von Input ist, möchten Sie wahrscheinlich die value Eigenschaft, so würden Sie tun:

param : document.getElementById("nombre").value 
+0

Ja, ist ein String, .value war das Problem. Vielen Dank, nur ein Problem von jetzt 7 Stunden bei der Arbeit. ;) – agapitocandemor

+0

Eine letzte Frage, wie kann ich den vom Server zurückgegebenen Wert speichern, nachdem ich die get-Anfrage mit diesem Code gesendet habe, um sie im Portlet anzuzeigen ?? Danke vielmals. – agapitocandemor

1

Aktualisiert Antwort:

Denken dies durch ein wenig mehr, sollten Sie wahrscheinlich tun dies in einem ganz anders. Sie senden die Daten, wenn der Benutzer auf die Schaltfläche zum Absenden klickt, aber denken Sie daran, wenn ein Benutzer die Eingabetaste drückt, während er in das Eingabefeld des Formulars eingibt, aber Ihr Code wird das nicht erfassen.

Eine robustere Lösung wäre es auf diese Art und Weise zu tun, statt:

<div> 
    <form id="nombre_search"> 
    <input type="text" id="nombre" value="<%=searching%>"/> 
    <input type="submit" value="Submit"/> 
    </form> 
</div>​ 

<script type="text/javascript" charset="utf-8"> 
    $(document).ready(function() { 
    $("#nombre_search").submit(function(){ 
     $.get("http://localhost:8080/c/portal/json_service", { 
     serviceClassName: "com.liferay.test.service.TrabajadorServiceUtil", 
     serviceMethodName: "findByName", 
     servletContextName: "TrabajadorPlugin-portlet", 
     serviceParameters: "[param]", 
     param : $("#nombre").val() 
     }); 
     return false; 
    }); 
    }); 
</script> 

Änderungen an Ihrem Code:

  • Added eine ID in das Formular.
  • Die Schaltfläche zum Senden eine submit Schaltfläche anstelle von nur button gemacht.
  • Platzierter Code innerhalb $(document).ready Block.
  • Code wird ausgeführt, wenn form nicht gesendet wird, wenn button geklickt wird.

hoffe, das hilft, Sandro

+0

Hallo Sandro, danke für deine Antwort. Ich habe Ihren Code eingefügt und er gibt Fehler bei onClick = "return get();" Die Funktion heißt nicht mehr get() mit Ihrem Code, oder?Der Fehler sagt: "Kann nicht von außerhalb einer Funktion oder Methode zurückkehren." – agapitocandemor

+0

Entschuldigung, ich vergesse zu sagen, dass das mit dem kommentierten Code passiert, nicht mit meiner erneuerten Funktion. – agapitocandemor

+1

Ich aktualisierte meine Antwort. Der Grund dafür, dass die Funktion "get" nicht definiert ist, hängt wahrscheinlich damit zusammen, wie sie auf der Seite deklariert wird. Sie sollten Funktionen nicht mit 'function get() {}' definieren, sondern 'var get = function() {};' oder 'window.get = function() {};'. Die letzten beiden Beispiele sind in allen Browsern vorhersagbarer. – Sandro