2011-11-01 54 views
12

Estoy tratando de pasar una matriz de parámetros de cadena a un servicio web C# ASP.NET usando jQuery Ajax. Aquí está mi método web de muestra. Tenga en cuenta que la función acepta una cantidad variable de parámetros. Obtengo un Error interno de 500 servidores en la consola de JavaScript de Chrome cuando ejecuto el jquery. Estoy usando jQuery 1.6.2 y .NET3.5Pasando una matriz de cadenas a webmethod con una cantidad variable de argumentos usando jQuery AJAX

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

Aquí está el 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> 

se aprecia cualquier ayuda!

+0

Tal vez podría [Serializar] (http://api.jquery.com/serialize/) la matriz y luego se unserialize en el servicio. – Shomz

Respuesta

21

revisada código del lado del servidor:

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

Además, agregue esta por encima de su declaración WebService clase:

[System.Web.Script.Services.ScriptService] 

revisado código de cliente:

$(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"); 
    } 

Además, agregue encima de ese script se bloquea una referencia a JSON2, como por ejemplo:

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

Notas:

  • He probado esto bajo .NET 4 y usando jQuery 1.6.4.
  • Asegúrese de mantener los nombres de las variables de cliente y servidor de sincronización:
    public string Concat(List<string> arr)
    data: JSON.stringify({ arr: myCars })
+0

¡Gracias! eso funciono. – orikon

+0

Ahora estoy tratando de extender esto para usar con jqGrid pero no está funcionando, ¿alguna idea? He abierto otra pregunta aquí: http://stackoverflow.com/questions/7975662/passing-array-of-strings-to-jqgrid – orikon

+0

Tuve que hacer que mi método del lado del servidor fuera estático para que funcionara. ejemplo: cadena estática pública Concat (Lista arr) –

Cuestiones relacionadas