2010-05-04 12 views
5

ho creato un WebMethod nel file code-behind della mia pagina come tale:ASP .NET: Impossibile chiamare Pagina WebMethod utilizzando jQuery

[System.Web.Services.WebMethod()] 
public static string Test() 
{ 
    return "TEST"; 
} 

ho creato la seguente pagina HTML di provarlo:

<html> 
<head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"/></script> 
    <script type="text/javascript"> 
     function test() {    
      $.ajax({ 
       type: "POST", 
       url: "http://localhost/TestApp/TestPage.aspx/Test", 
       data: "{}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "text", 
       success: function(msg) { 
        alert(msg.d); 
       } 
      }); 
     } 
    </script> 
</head> 
<body> 
    <button onclick="test();">Click Me</button> 
</body> 
</html> 

Quando faccio clic sul pulsante, l'AJAX si spegne, ma non viene restituito nulla. Quando eseguo il debug del mio codice, il metodo Test() non viene nemmeno chiamato. Qualche idea?

risposta

6

provare

url: "TestPage.aspx/Test" 

o qualunque URL che ha colpito la pagina relativa.

Inavvertitamente si sta violando same origin policy.

Inoltre, sebbene non ci sia ancora, ci si aspetta un oggetto d: wrapped. Dato che stai per ottenere una stringa.

Questo dovrebbe portarti dove vuoi andare.

function test() {    
     $.ajax({ 
      type: "POST", 
      url: "TestPage.aspx/Test", 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) { 
       alert(msg.d); 
      } 
     }); 
    } 
+0

Problema risolto! Grazie Code Poet e tutti gli altri che hanno risposto. Era duplice: il 'dataType' era parte del problema, quindi ho dato a tutti un voto su chi ha risposto su quella parte. In definitiva, si è arrivati ​​a violare inavvertitamente la stessa politica di origine, motivo per cui l'ho contrassegnato come la soluzione. Grazie ancora a tutti. Apprezzalo! – John

+0

@ John felice di aiutare. –

0

è necessario impostare Test() per accettare/consentire POST

+0

- WebMethod è tutto ciò che è richiesto sul lato server. –

0

Se i PageMethods sono correttamente registrati sulla tua pagina, si dovrebbe essere in grado di chiamarli con un Microsoft registrata oggetto chiamato PageMethods.

Il javascript deve essere eseguito dopo che la pagina di aspx ha caricato tutte le librerie specifiche di Microsoft. Quando questi vengono caricati, puoi chiamare il tuo PageMethod in questo modo:

PageMethods.Test (function On) Su {function {), function() OnFailed {});

Ecco un link a esempi migliori:

http://www.junasoftware.com/blog/using-jquery-ajax-and-page-methods-with-a-asp.net-webservice.aspx

Se non si è già, Mi consiglia di utilizzare Firebug per aiutare il debug di queste chiamate sul lato client. Firebug ti fornirà tutte le informazioni necessarie per determinare cosa sta realmente accadendo.

getfirebug.com

+0

-1 e benvenuto su StackOverflow. La domanda indica in particolare che jQuery è in uso. MsAjax NON è obbligato a pubblicare su un metodo di pagina. –

+0

OK abbastanza giusto. Mi sembrava che stesse cercando un modo per farlo funzionare, e ho fornito un'alternativa.Sono d'accordo che MsAjax non è * richiesto * per farlo funzionare, ma sarebbe disponibile e potrebbe essere un'alternativa praticabile. La domanda indica specificamente che jQuery è in uso, ma non dove dice jQuery HAS da utilizzare. – Jeremy

+0

Mi dispiace per Jeremy. Avrei dovuto essere più chiaro, ma sì, deve essere tramite jQuery. Terrò sicuramente presente la tua risposta anche se deciderò di seguire la rotta MsAjax in futuro. – John

1

ho fatto questa funzione javascript per chiamare WebMethods utilizzando jQuery:

function pageMethod(fn, params, successFn, errorFn) { 
    var pagePath = window.location.pathname; 

    var jsonData = $.toJSON(params); 

    $.ajax({ 
     type: "POST", 
     url: pagePath + "/" + fn, 
     contentType: "application/json; charset=utf-8", 
     data: jsonData, 
     dataType: "json", 
     success: successFn, 
     error: errorFn 
    }); 
} 

Che $ .toJson serializzazione è realizzato dalla jquery.json-1.3 plugin.

E come si può vedere, dataType deve essere "json"

+0

Grazie per aver condiviso! Userò questa pratica piccola funzione in avanti. – John

2

penso tipo di dati dovrebbe essere "json". Aggiungi una funzione di errore per vedere quale stato di errore ritorni: 404 non trovato, 500 errore del server ecc. Ecc.

+0

Buona chiamata. Grazie! – John

Problemi correlati