2017-08-06 92 views
0

我编写了像网上其他人一样,但我的WebMethod没有从后操作中击中。我相信我的代码很好,但我会发布我的代码以防万一。 我在WebMethod中放置了一个断点,这是我知道它不被调用的方式。 任何帮助,将不胜感激。AJAX POST到WEB方法不工作我

AXAJ

   var div = document.getElementById(this.id); 
       var divid = div.getElementsByClassName("portlet-id"); 

       varSQL="UPDATE [ToDoTrack] SET [Status] = '" + this.id + "' WHERE [ID] = '" + divid[0].innerHTML + "'"; 

       var item = {}; 
       item.status = this.id; 
       item.id = divid[0].innerHTML; 
       var Data = '{varSQL: ' + varSQL + ' }' 

       $.ajax({ 
        type: "POST", 
        url: "ToDoTrack.aspx/UpdateDB", 
        data: Data, 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function (response) 
        { 
         window.location.reload(); 
        }, 
        error: function (XMLHttpRequest, textStatus, errorThrown) 
        { 
         alert("Status: " + textStatus); 
         alert("Error: " + errorThrown); 
        } 
       }); 

代码隐藏

[WebMethod] 
    [ScriptMethod] 
    public static void UpdateDB(string varSQL) 
    { 
     string connStr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(connStr)) 
     { 
      using (SqlCommand cmd = new SqlCommand(varSQL)) 
      { 
       cmd.CommandType = CommandType.Text; 
       cmd.Connection = con; 
       con.Open(); 
       cmd.ExecuteNonQuery(); 
       con.Close(); 
      } 
     } 
    } 

回答

0

有一个问题的数据对象,这是一个字符串,而不是一个对象 它不建议创建客户端上的SQL这是一个安全漏洞,除非它是一个应用程序

//Problem is a string not object 
var Data = '{varSQL: ' + varSQL + ' }' 


//Solution below 

var Data = {'varSQL': varSQL }; 
// Or this 
var Data = 'varSQL='+varSQL; 
+0

从移动设备发布原谅错误和错误的语法。 –

+0

谢谢EDC,但即使SQL的字符串已经通过,我也希望WebMethod至少可以被调用,但事实并非如此。 – Dennis

+0

关于安全性,我认为这可能是一个坏主意,但我只是想测试,看看数据库是否得到更新 – Dennis

0

的代码似乎工作正常,但如果你在未来有这个问题,这是我从网上找来的东西,你似乎需要为阿贾克斯后与webMethods的工作:

确保在您的网址AJAX是正确的

确保您的JSON是良好形成

设置<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">,我的脚本经理是在我的Site.Master

设置settings.AutoRedirectMode = RedirectMode.Off;在App_Start> RouteConfig.cs文件中