2012-11-16 74 views
5

长时间的WinForm程序员在这里,但新的Web编程场景。我有Visual Studio 2010,并创建了一个新的WebSite项目。 我似乎无法让ajax调用我创建的webmethod。当我点击页面上的按钮时,根本没有任何反应。Web方法不是由jQuery的JavaScript函数调用

它看起来像jquery 1.4.1会自动添加到脚本文件夹中,当我创建一个WebSite项目。

Default.aspx中我加2个脚本标签:

<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script> 
<script language="javascript" type="text/javascript" src="Scripts/Process.js"> 

我把一个按钮在页面上,其中的onclick功能在Process.js定义:

<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" /> 

过程中。 JS我有以下代码:

function btnTest_onclick() { 

    var strData = JSON.stringify({ 
     userid: 5 
    }); 

    alert(strData); 

    $.ajax({ 
     url: 'Default.aspx/GetData', 
     type: "POST", 
     data: strData, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: Success, 
     failure: Failure, 
     async: true 
    }); 
} 

function Success(data) { 
    alert("success"); 
} 

function Failure(data) { 
    alert("failure"); 
} 

在Default.aspx.cs:

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    [WebMethod()] 
    public static string GetData(int id) 
    { 
     return "hello, my id is " + id; 
    } 
} 
+0

你知道...你可以随时'控制台来获取最新的稳定版本的jQuery(或使用UI做同样的,甚至通过更换脚本做手工更新,包jquery'文件) – MilkyWayJoe

+1

也在[$ .ajax](http://api.jquery.com/jQuery.ajax/)中,正确的回调是'error'而不是'failure'。替换那个。 – MilkyWayJoe

+0

1.4.1不稳定?我想因为MS似乎自动为你包括它,我认为它必须是稳定的。这有效地告诉我,它是失败的,谢谢。现在我需要弄清楚为什么它失败:) – user441521

回答

4

我不知道,如果使用jQuery是对你的要求做出Ajax请求,但你可以更轻松地做Ajax请求页面方法使用ASP.NET AJAX的能力。

首先我想要注意的是,要使用PageMethods,您需要将脚本管理器控件添加到页面并指定EnablePageMethods =“True”。

当您这样做时,ScriptManager将呈现PageMethods客户端定义,它代表页面上定义的页面方法的代理,并且您可以使用Ajax请求轻松调用此方法。

所以,你可以试试下面的代码:

<asp:ScriptManager ID="ScriptManager" runat="server" EnablePartialRendering="true" EnablePageMethods="True" /> 
<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" /> 
<script type="text/javascript"> 
    function btnTest_onclick() { 

     PageMethods.GetData(5, Success, Failure); 
    } 

    function Success(data) { 
     alert("success"); 
     alert(data); 
    } 

    function Failure(data) { 
     alert("failure"); 
    } 

</script> 

正如你可以看到这个代码有较少的代码行和它的作品。

+0

这确实奏效!所以这表明我的ajax调用已经搞乱了。我真的很想知道我做错了什么。你只能用这个函数来定义该页面上定义的函数吗?例如,如果我想创建一个基本上存在的页面来存储常用函数以供任何地方使用,那么这个工作是否会存在于一个页面中,而不是那个想要调用它的页面呢?我看到的一个主要好处是,我可以通过“Default.aspx/GetData”使用ajax调用来指定函数驻留的页面。我可以使用ScriptManage和PageMethods做到这一点吗?如果是这样,我更喜欢这种方法。 – user441521

+0

要在页面之间共享一些代码,最好使用支持Ajax的WCF或Web服务。 Dino Esposito的以下链接描述了这种方法:http://dotnetslackers.com/articles/ajax/JSON-EnabledWCFServicesInASPNET35.aspx。如果您将阅读本文,那么您会看到使用wcf服务的工作与使用页面方法的工作相同。注意:您还可以通过wcf服务方法访问会话,这些方法以文章中描述的方式实现。 –

+0

您也可以查看我对以下问题的回答:http://stackoverflow.com/questions/12886991/calling-wcf-server-from-asp-net/12992569#12992569 –

1

数据项目名称必须匹配的页面方法的参数:

var strData = JSON.stringify({ 
       id_MATCH: 5 
      }); 

    [WebMethod()] 
    public static string GetData(int id_MATCH) 
    { 
     return "hello, my id is " + id_MATCH; 
    } 
+0

我把它们都命名为id,但仍然失败。也没有人知道如何阻止IE缓存的东西。我做了改变,reran和alert()仍然说userid。我删除了临时互联网文件和reran,然后显示id,但它烦恼不得不删除临时互联网文件。 – user441521

+1

尝试在测试之间停止开发服务器。右键单击任务栏中的通知图标并选择停止。 –

+0

工作原理虽然大约相同的删除临时互联网文件的点击次数:/ – user441521

0

下面是Ajax的帖子和网页的方法来处理

<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" /> 
<script type="text/javascript" > 
function btnTest_onclick() { 

var strData = JSON.stringify({ 
    userid: 5 
}); 

alert(strData); 

$.ajax({ 
    url: 'Default.aspx/GetData', 
    type: "POST", 
    data: strData, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: Success, 
    failure: Failure, 
    async: true 
}); 
} 

function Success(data) { 
alert("success"); 
} 

function Failure(data) { 
alert("failure"); 
}</script> 

[System.Web.Services.WebMethod()] 
    public static string GetData(int userid) 
    { 
     return "hello, my id is " + userid; 
    } 

能否请您检查上面的代码,其中从$就发送的数据名称是一样的,在的WebMethod。

感谢

相关问题