2011-06-17 4 views
0

Ce code a bien fonctionné en mvc2, mais en revenant à l'ASPX traditionnel (à cause de Sharepoint 2010). Je rencontre des erreurs. Quelqu'un peut-il me dire ce que je fais mal pour ce cadre?aspx et jquery.ajax renvoie toujours une erreur

Cet appel ajax est dans le .ready $

$.ajax({ 
     type: "POST", 
     dataType: "json", 
     data: 'siteName=a&siteUrl=b', 
     url: 'Wizard.aspx/DoesNameUrlExist', 
     beforeSend: function() { alert("before send"); }, 
     complete: function() { alert("complete"); }, 
     success: function (data) { alert("success"); }, 
     error: function (data) { 
      if ($("meta[name=debug]").attr("content") == "true") { 
       //Full Error when debugging 
       var errDoc = window.open(); 
       errDoc.document.write(data.responseText); 
       errDoc.document.close(); 
      } 
      else { 
       // generic error message for production use 
       alert("An unexpected error occurred."); 
      } return false; 
     } 
    }); 
Code

derrière

[WebMethod] 
public static string DoesNameUrlExist(string siteName, string siteUrl) 
{ 
    //do something 
    return someString; 
} 

je reçois un à chaque fois d'erreur.

+0

Savez-vous ce que le message d'erreur est? –

Répondre

1

Vous devez envoyer JSON au service et indiquer que vous » re faisant par l'en-tête contentType:

$.ajax({ 
    type: "POST", 
    contentType: 'application/json', 
    data: '{"siteName":"a","siteUrl":"b"}', 
    url: 'Wizard.aspx/DoesNameUrlExist', 
    beforeSend: function() { alert("before send"); }, 
    complete: function() { alert("complete"); }, 
    success: function (data) { alert("success"); }, 
    error: function (data) { 
     if ($("meta[name=debug]").attr("content") == "true") { 
      //Full Error when debugging 
      var errDoc = window.open(); 
      errDoc.document.write(data.responseText); 
      errDoc.document.close(); 
     } 
     else { 
      // generic error message for production use 
      alert("An unexpected error occurred."); 
     } return false; 
    } 
}); 

Plus d'infos ici: http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

En outre, si vous utilisez jQuery 1.4, vous pouvez supprimer dataType. jQuery will infer JSON automatically based on the response's Content-Type header.

0

Les appels Ajax dans jQuery vous donneront toujours une erreur si vous déclarez votre contentType comme json et que le type de contenu de réponse est autre chose que json. Si la réponse de votre WebMethod a quelque chose de différent (tel que html ou texte), vous aurez toujours cette erreur. Vous pouvez définir ce type de réponse sur votre méthode comme ceci:

[WebMethod] 
[ScriptMethod (UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
public static string DoesNameUrlExist(string siteName, string siteUrl) 

En dehors de WebMethods cela peut aussi être réalisé comme ceci:

Response.ContentType = "application/json"; 
+0

Comme il appelle une méthode de page, il attend JSON pour les paramètres d'entrée, et il définit aussi automatiquement le type de contenu 'application/json' sur la réponse. Pas besoin de le faire manuellement. –

+0

je pensais que json est attendu comme entrée si vous l'avez spécifié. [link] (http://api.jquery.com/jQuery.ajax/). nous avons utilisé pageMethods dans le passé et nous ne l'avons pas passé dans json – Anthony

+1

Vous auriez pu vous en passer s'il n'y avait pas de paramètres, mais vous devez utiliser des paramètres d'entrée JSON avec des "méthodes de page" statiques et des "ScriptServices" ASMX. Vous n'avez peut-être pas remarqué cela dans le passé si vous utilisiez un ScriptManager pour appeler des méthodes de page via la syntaxe PageMethod.YourMethodName(). MicrosoftAjax.js gère automatiquement la sérialisation JSON côté client dans ce cas. –

Questions connexes