【问题标题】:Connect javascript with asp.net将 javascript 与 asp.net 连接
【发布时间】:2014-06-06 03:35:13
【问题描述】:

我无法通过 ajax 和 json 将 javascript 与 asp.net webforms 方法连接起来。

我在一个文件夹中有 javascript,在另一个文件夹中有 page.aspx,例如: - 帐户/createUser.aspx - 脚本/动作/createuser.js

我已经尝试了很多东西,例如,在方法[Webmethod]之前使用,在ajax动作中改变了很多东西,但没有任何效果。在大多数情况下,谷歌浏览器都会给出错误:

POST .../Account/createUser.aspx/CheckUserName 401(未授权)

如果我在 javascript 行中删除:“dataType: json”和“contentType: application/json; charset=utf-8”,错误就会消失并进入“完成”行...

我需要说明来解决这个问题...我搜索了很多帖子,遵循了很多教程,但没有任何效果。 例如:更改我的 webconfig 以接受任何用户,我的 routeconfig.cs...

有什么东西在倒下吗?什么?我需要声明一些东西才能使用json吗?

Javascript:

$("#USUserName").change(function () {
    alert($("#USUserName").val());
    $.ajax({
        type: "POST",
        url: "createUser.aspx/CheckUserName",
        data: '{username: "' + $("#USUserName").val() + '" }',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        complete: function (jsondata, stat) {
            if (stat == "success") {
                var response = JSON.parse(jsondata.responseText).d;
                alert((response));
            }
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert();
        }
    });

aspx.cs 代码:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string CheckUserName(string username)
    {
        var existUser = context.user.Where(us => ((us.username).Equals(username))).Count();
        string returnValue = string.Empty;
        if (existUser.Equals(0))
        {
            returnValue = "test- yes!";

        }
        else
            returnValue = "test- no!";
        return returnValue;
    }

【问题讨论】:

  • 也许这是在不同的域中运行?如果是,那么您已经踩到了跨域安全性,jsonp 可以帮助您。
  • 不同的文件夹不是不同的域。
  • 第一个建议:根据你的浏览器,安装Firefox+Firebug,或者Fiddler,或者Chrome + Web Developer Tools + JSONview。这些将使您能够了解您的 AJAX 请求。否则,作为开发人员,你是盲目的。

标签: c# javascript asp.net ajax json


【解决方案1】:

参见 MS 文档:

ScriptMethodAttribute 属性是可选的。 (但是,方法 可以从客户端脚本调用的必须具有 System.Web.Services.WebMethodAttribute 属性已应用。)。如果一个 方法没有用 ScriptMethodAttribute 标记,该方法将是 使用 HTTP POST 命令调用,响应将是 序列化为 JSON。您不能从脚本中覆盖此设置。

如果您只想要 JSON 并使用 HTTP POST 方法,请删除可选的 [ScriptMethod ...] 并确保您只有 [WebMethod]

http://msdn.microsoft.com/en-us/library/system.web.script.services.scriptmethodattribute.aspx

【讨论】:

  • 我已经用 [WebMethod] 试过了,结果是一样的。
【解决方案2】:

您需要使用 WebMethod 属性才能使用 ajax 调用(如果域相同)。

C#

public partial class PageName: Page 
{
  [WebMethod]
  public static string MethodName()
  {
    return "success";
  }
}

JS

$.ajax({
  type: "POST",
  url: "PageName.aspx/MethodName",
  data: "{}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(msg) {
    // Do something interesting here.
  }
});-

来源:http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

如果域不同,您必须编辑跨域策略: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

【讨论】:

猜你喜欢
  • 2020-10-10
  • 1970-01-01
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 2014-01-08
  • 1970-01-01
  • 2017-09-07
相关资源
最近更新 更多