2011-11-01 16 views
12

Sto provando a passare un array di parametri stringa a un servizio Web ASP.NET C# utilizzando jQuery Ajax. Ecco il mio metodo web di esempio. Si noti che la funzione accetta un numero variabile di parametri. Quando eseguo jquery, ricevo un errore interno di 500 server nella console javascript di Chrome. Sto utilizzando jQuery 1.6.2 e .NET3.5Passare array di stringhe a webmethod con numero variabile di argomenti utilizzando jQuery AJAX

[WebMethod] 
public string Concat(params string[] arr) 
{ 
    string result = ""; 
    for (int i = 0; i < arr.Length; i++) 
    { 
     result += arr[i]; 
    } 
    return result; 
} 

Ecco l'jquery:

$(document).ready(function() { 

    var myCars=new Array(); 
    myCars[0]="Saab";  
    myCars[1]="Volvo"; 
    myCars[2]="BMW"; 

    $.ajax({ 
     type: "POST", 
     url: "WebService.asmx/Concat", 
     data: {arr: myCars},  //can't figure out what to put here  
     success: onSuccess, 
     Error: onError 
    }); 
}); 

function onSuccess() 
{ 
    alert("testing"); 
} 

function onError() 
{ 
    alert("fail"); 
} 

</script> 

Ogni aiuto è apprezzato!

+0

forse si potrebbe [serialize] (http://api.jquery.com/serialize/) l'array e poi si unserialize nel servizio. – Shomz

risposta

21

codice lato server revisionato:

[WebMethod] 
public string Concat(List<string> arr) 
{ 
    string result = ""; 
    for (int i = 0; i < arr.Count; i++) 
    { 
     result += arr[i]; 
    } 
    return result; 
} 

Inoltre, aggiungere questo sopra la dichiarazione WebService classe:

[System.Web.Script.Services.ScriptService] 

Revised codice lato client:

$(document).ready(function() { 

     var myCars = new Array(); 
     myCars[0] = "Saab"; 
     myCars[1] = "Volvo"; 
     myCars[2] = "BMW"; 

     $.ajax({ 
      type: "POST", 
      url: "WebService.asmx/Concat", 
      data: JSON.stringify({ arr: myCars }), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: onSuccess, 
      failure: onError 
     }); 
    }); 

    function onSuccess(response) { 
     alert(response.d); 
    } 

    function onError() { 
     alert("fail"); 
    } 

Inoltre, aggiungere sopra a tale script, blocchi un riferimento a JSON2, ad esempio:

<script src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script> 

Note:

  • Ho testato questo sotto .NET 4 e utilizzando jQuery 1.6.4.
  • Assicurarsi di mantenere i client e server nomi delle variabili in sincronia:
    public string Concat(List<string> arr)
    data: JSON.stringify({ arr: myCars })
+0

Grazie! quello ha funzionato. – orikon

+0

Ora sto cercando di estenderlo per usare con jqGrid ma non funziona, qualche idea? Ho aperto un'altra domanda qui: http://stackoverflow.com/questions/7975662/passing-array-of-strings-to-jqgrid – orikon

+0

Ho dovuto rendere il mio metodo lato server come inorder statico per farlo funzionare. esempio: stringa statica pubblica Concat (Lista arr) –

Problemi correlati