2010-10-21 3 views
0

Voici mes JS:Pourquoi cet appel ajax jQuery pour C# méthode Web ne fonctionne pas

function declassifyAjax(e) { 

    var items = getSelected(); 
    var docIds = new Array(); 
    items.each(get); 

    //get ids of QcItem/docId we are dealing with 
    function get(count, el) { 
     docIds[count] = $(el).parent().attr('id'); 
    } 

    var dataObj = new Object(); 
    dataObj.batchId = batchId; 
    dataObj.docIds = docIds; 
    var dataString = JSON.stringify(dataObj) 


    //make call to webservice to get html to recreate view showing 
    //pending declassification 
    $.ajax({ 
     type: "POST", 
     url: applicationRoot + 'Models/BatchQC.asmx/declassify', 
     data: dataString, 
     contentType: "application/json; charset=utf-8", 
     success: function (data) { 
      if (ProcessWebMethodResult.processWebMethodResult(data) == true) { 
       declassifyProcess(data, e); 
      } 
     }, 
     error: function (e) { 
      alert("Failed to Get declassification details"); 
     } 
    }); 
} 

Et voici mon service Web:

//type to represent the input the declassify method 
    public class DeclassifyType 
    { 
     public int batchId; 
     public string[] docIds; 
    } 

    [WebMethod(EnableSession = true)] 
    public WebMethodResult declassify(DeclassifyType dataString) 
    { 
    } 

Toute aide appréciée!

Le débogage dans Firebug montre que les variables dataObj, batchId, docIds et dataString sont correctes. Il y a quelque chose qui ne va pas dans la façon dont ma signature de méthode Web est configurée, parce que l'Ajax n'est jamais éteint. En passant par la méthode .ajax, ça va à l'erreur, pas au succès.

+1

Lorsque vous dites "ne fonctionne pas", quelle partie du processus ne fonctionne pas? Qu'attendez-vous qu'il se passe? Quels messages d'erreur, le cas échéant, obtenez-vous? Avez-vous essayé le débogage avec [Firebug] (http://getfirebug.com/) ou similaire? S'il vous plaît modifier votre question et donner plus de détails. –

+0

Est-ce que 'declassifyAjax' est déjà déclenché? Que se passe-t-il si vous y mettez une alerte()? –

Répondre

2

Vos méthodes Web attendent un paramètre, l'objet de données que vous possédez déjà, mais vous transmettez plusieurs paramètres puisque vous passez directement l'objet.

Au lieu de cela, vous devez avoir un objet avec une propriété, dataString et que la valeur de propriété devrait être votre objet, comme ceci:

var dataString = JSON.stringify({ dataString: dataObj }); 
            ▲--should match--▼ 
public WebMethodResult declassify(DeclassifyType dataString) 
1

Ah, je viens de la réparer,

juste changé la signature à

[WebMethod(EnableSession = true)] 
public WebMethodResult declassify(int batchId, string[] docIds) 
{ 
} 

Simple vraiment. Merci d'avoir vérifié mon message!

Questions connexes