2013-06-05 5 views
0

Je suis confronté à une situation vraiment étrange. J'ai un fichier JavaScript :Méthode Web avec ajax

/// <reference path="jquery-1.8.2.min.js" /> 
var compte = 0; 
var poste = []; 
var posteselectionner = [3]; 
$(function() { 

    jQuery.getJSON("ServiceContactTest.svc/DoWork", null, function() { **//HERE **** 

      alert("ds"); 

    }); 

    var msg = 1; 

    $("#Uploadb").click(function() { 

     alert('f'); 

    }); 

    $(".test1").click(function() { 

     msg = msg + 1; 

     $("#li1").html("<a href='#'><img src='images/partners/jquery.png' alt=''></a>"); 

    }); 

    $("#info").mouseover(function() { 

     $("#info").popover("show"); 

    }); 

    $("#info").mouseleave(function() { 

     $("#info").popover("hide"); 

    }); 

    $("#envoyer").click(function() { 

     var erreur = true; 

     if (document.getElementById("myFile").value == "") { 

     jQuery("#alert2").attr("style", "display:block"); 
     erreur = false; 

     } else { 

     jQuery("#alert2").attr("style", "display:none"); 

     } 

     if (compte == 0) { 

     jQuery("#alert3").attr("style", "display:block"); 
     erreur = false; 

     } else { 

     jQuery("#alert3").attr("style", "display:none"); 
     } 

     if (erreur == true) { 

     jQuery.getJSON("ServiceContactTest.svc/DoWork", null, function() { **//HERE **** 

      alert("ds"); 

     }); 

     alert('doo3'); 
     } 

    return erreur; 

}); 

}); Comme vous le pouvez, voir I bind un événement dans le chargement de la page. Mais ce que je tiens à vous est le PREMIER appel et l'appel DEUXIÈME de la méthode Web:

1- Le premier appel est en cours d'exécution de la charge de la page:

jQuery.getJSON("ServiceContactTest.svc/DoWork", null, function() { **//HERE **** 

    alert("ds"); 

}); 

2- La deuxième dans la Event Click de l'entrée « Envoyer »:

$("#envoyer").click(function() { 

     var erreur = true; 

     if (document.getElementById("myFile").value == "") { 

     jQuery("#alert2").attr("style", "display:block"); 
     erreur = false; 

     } else { 

     jQuery("#alert2").attr("style", "display:none"); 

     } 

     if (compte == 0) { 

     jQuery("#alert3").attr("style", "display:block"); 
     erreur = false; 

     } else { 

     jQuery("#alert3").attr("style", "display:none"); 
     } 

     if (erreur == true) { 

     jQuery.getJSON("ServiceContactTest.svc/DoWork", null, function() { **//HERE **** 

      alert("ds"); 

     }); 

     alert('doo3'); 
     } 

    return erreur; 

    }); 

le problème que j'ai est, le premier appel fonctionne très bien, mais le second ne fonctionnent pas du tout.

Je sais que le code du second appel ne renvoie pas d'erreur car le alert('doo3'); est appelé.

Voici ma méthode de service Web:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.ServiceModel.Activation; 
using System.ServiceModel.Web; 
using System.Text; 

namespace CvContact 
{ 
    [ServiceContract(Namespace = "")] 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class ServiceContactTest 
    { 
     [OperationContract] 
     [WebGet(ResponseFormat = WebMessageFormat.Json)] 
     public void DoWork() 
     { 
      return; 
     } 
    } 
} 

Voici mon html:

<input id="envoyer" type="submit" class="btn btn-danger" runat=server value="Postuler !" ClientIdmode="static" /> 

Je ne sais vraiment pas ce que je fais mal. Savez-vous ce que cela peut causer? Travailler sur le page load, mais collé sur Event.

+0

Pour votre information '$ (function() {...});' est raccourci pour DOM prêt, pas de fenêtre onload –

Répondre

4

Vous devez éviter le comportement par défaut sur le bouton soumettre sinon votre page est reload si "erreur" = true:

$("#envoyer").click(function (e) { 
    e.preventDefault(); 
    //code here 

    if(!erreur) 
    $('#myform').trigger('submit');//#myform because you didn't post your html code 
}); 
+0

ok, ça marche MAIS la page n'est pas postback ET pourquoi le alrt ('doo3'); venez avant l'alerte ('ds'); ? Merci –

+0

car $ .getJSON() est asynchrone. Pour soumettre une page, vous devez déclencher l'événement submit() du formulaire. Vous souhaiterez peut-être soumettre un formulaire concernant la méthode que renvoie votre méthode getJSON, dans ce cas, envoyez un formulaire dans la fonction de rappel getJSON. J'espère que vous avez la logique. –

+0

Ok, mais pourquoi l'alerte ('doo3') vient avant? –