2010-10-13 10 views
0

J'ai données de publication de la page fonctionnelle à une page WebMethodpost jQuery AJAX avec fileupload

[WebMethod()] 
public static string sayHello(string pTest, string pText) 
{ 
    return pTest + " - " + pText; 
} 

que j'appel à l'aide de cette jQuery

$(document).ready(function() { 
    $("#sayHelloButton").click(function (event) { 
    var name = $('#name').val(); 
    var text = $('#text').val(); 
    var dataString = JSON.stringify({ 
     pTest: name, 
     pText: text 
    }); 

    $.ajax({ 
     type: "POST", 
     url: "page.aspx/sayHello", 
     contentType: "application/json; charset=utf-8", 
     data: dataString, 
     dataType: "json", 
     success: AjaxSucceeded, 
     error: AjaxFailed, 
     beforeSend: AjaxStart, 
     complete: AjaxEnd 
    }); 
    }); 
}); 

mais maintenant il devrait également être possible de télécharger un fichier et ici je suis un peu perdu. De ce que je peux lire dans différents messages ici, il n'est pas possible mais s'il vous plaît corrigez-moi si je me trompe - mais j'ai vu plusieurs plugins jQuery qui rendent le téléchargement possible, par exemple. grâce à un script Flash, mais comment sera-t-il possible à la fois de poster des données et de les télécharger en un seul clic? Est-ce que quelqu'un a des suggestions qui télécharger le plugin est le meilleur - et comment je peux réussir à télécharger et publier en une seule action?

Répondre

0

Impossible de dire pour tous les plugins, mais j'utilise jQuery Form sans aucun problème. Aucun flash impliqué, il crée simplement l'iframe caché à la place.

Here's a demo.

mais comment il est alors possible à la fois des données de poste et télécharger avec un seul clic
Le processus est le même que celui à la demande normale ajax. Vous déclarez un élément de formulaire, mais au lieu de $('#myform').submit(); faites $('#myform').ajaxSubmit().

+0

S'il vous plaît me corriger si je me trompe, mais si je fais comme vous le suggérez et j'utilise ASP.NET qui ont seulement 1 forme-tag je suppose qu'il soumet beaucoup de choses non pertinentes (par exemple viewstate et des éléments appartenant à une autre partie de la page) rendant l'opération plus lente et que je ne peux pas cibler un WebMethod avec des paramètres spécifiques comme dans mon exemple? – keysersoze

+0

@keysersoze Par défaut, oui. Je voudrais essayer de créer un formulaire caché de javascript et attacher votre entrée de fichier à elle (temporaire). Mais jamais eu à résoudre ce problème, donc pas de garanties. –

0

Si l'on suppose sayHelloButton est l'id du bouton de soumission sur le formulaire que vous utilisez pour télécharger le fichier, assurez-vous d'ajouter: event.preventDefault(); à votre fonction $("#sayHelloButton").click() ou utiliser javascript.void(); sur le formulaire pour empêcher le navigateur d'afficher les données en utilisant son comportement par défaut. Sinon, votre code ajax ne sera jamais exécuté.

$("#sayHelloButton").click(function (event) { 
event.preventDefault(); 
var name = $('#name').val(); 
var text = $('#text').val(); 
var dataString = JSON.stringify({ 
    pTest: name, 
    pText: text 
});