aspx和jquery.ajax总是返回错误

问题描述:

此代码在mvc2中正常工作,但回到传统的ASPX(因为Sharepoint 2010)。我遇到错误。任何人都可以告诉我我为这个框架做错了什么?aspx和jquery.ajax总是返回错误

这Ajax调用是在$。就绪

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

代码背后

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

我得到一个错误每次。

+0

你知道错误信息是什么吗? –

您需要JSON发送到服务,并表明你”再通过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; 
    } 
}); 

此处了解详情:http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

另外,如果您使用jQuery 1.4,则可以删除dataTypejQuery will infer JSON automatically based on the response's Content-Type header

如果您将contentType声明为json,并且响应内容类型除json外,jQuery中的Ajax调用总会给您一个错误。如果来自WebMethod的响应具有不同的内容(如html或文本),您将始终得到该错误。您可以设置响应类型上你的方法是这样的:

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

的WebMethods之外这也可以实现这样的:

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

由于他正在调用页面方法,因此它确实希望JSON用于输入参数,并且它也会自动在响应中设置“application/json”Content-Type。不需要手动执行此操作。 –

+0

如果你指定它,我认为只是预期json作为输入。 [链接](http://api.jquery.com/jQuery.ajax/)。我们在过去已经使用过pageMethods,并且没有通过json – Anthony

+1

如果没有参数,您可能已经知道了,但是您必须使用带有静态“页面方法”和ASMX“ScriptServices”的JSON输入参数。如果您使用ScriptManager通过PageMethod.YourMethodName()语法调用页面方法,您可能没有注意到过去。在这种情况下,MicrosoftAjax.js会自动处理客户端JSON序列化。 –