2015-06-11 28 views
2

我试图从javascript调用服务器端函数使用jQuery。jQuery调用VB.NET返回整个HTML

AJAX

function addAsset() { 
    $.ajax({ 
     type: "GET", 
     contentType: "application/json; charset=utf-8", 
     url: "ServerMethods.aspx/AddAsset", 
     data: '{}', 
     dataType: "json", 
     success: function (response) { 
      alert(response); 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { 
      alert(textStatus); 
      alert(errorThrown); 
     } 
    }); 
} 

ServerMethods.aspx.vb

Public Class ServerMethods 
Inherits System.Web.UI.Page 

    <System.Web.Services.WebMethod()> _ 
    Public Shared Function AddAsset() As String 

     Return "Hello" 

    End Function 

End Class 

ServerMethods.aspx

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="ServerMethods.aspx.vb" Inherits="AssetManager.ServerMethods" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 

    </div> 
    </form> 
</body> 
</html> 

addAsset()一个按钮被点击时被调用。当我尝试将dataType更改为文本时,整个HTML代码将返回给ServerMethods。如果dataType设置为json,则会引发错误“SyntaxError:意外的令牌<”。我认为这是json试图解析HTML代码。我不想试图获得json响应,我只是想要一些响应,在这种情况下,我只是想返回“你好”。

任何想法?

回答

0

您可以尝试使用JavaScriptSerializer类来序列化从您的Web服务返回的数据。然后在您的.ajax()调用的成功处理程序中,您将使用JSON.parse()对其进行反序列化。

的Webservice:

<System.Web.Services.WebMethod()> _ 
Public Shared Function AddAsset() As String 
    Dim serializer As New JavaScriptSerializer() 
    Dim serializedResult = serializer.Serialize("Hello") 
    Return serializedResult 
End Function 

的Javascript:

success: function (response) { 
    var myHtml= JSON.parse(response); 
    alert(myHtml); 
} 

大多数现代浏览器都支持JSON.parse()。在没有的浏览器中,您可以使用json2

+0

相同的分析错误。可能它与我的ServerMethods.aspx页面有关(在原始邮件中添加它)? – dagonal

+0

@dagonal您是否先序列化结果?你的成功处理程序中'response'的价值是什么? –

+0

我使用的是旧版本的.NET,所以我没有参考JavaScriptSerializer。现在,我已将它升级到.NET 4.0,我的Web应用程序是通过疯狂的错误=/ – dagonal