Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多次将Javascript发布到VB.Net页面_Javascript_Jquery_Vb.net - Fatal编程技术网

多次将Javascript发布到VB.Net页面

多次将Javascript发布到VB.Net页面,javascript,jquery,vb.net,Javascript,Jquery,Vb.net,您好 单击javascript按钮后,我将使用jquery发布到url: $(".optionClick").click(function () { var caseOption = $(this).attr('title'); $.post("../tracking/RecordClick.aspx?page=gallery&item=" + caseOption); }); 在调用的页面上,我使用以下vb.net代码检索querystring变量并将其写入数

您好

单击javascript按钮后,我将使用jquery发布到url:

$(".optionClick").click(function () {
      var caseOption = $(this).attr('title');
      $.post("../tracking/RecordClick.aspx?page=gallery&item=" + caseOption);
});
在调用的页面上,我使用以下vb.net代码检索querystring变量并将其写入数据库:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not Request.QueryString("page") Is Nothing Then
        Dim trackingPage As String = Request.QueryString("page")
        Dim trackingIP As String = Request.UserHostAddress
        Dim trackingItem As String = Request.QueryString("item")
        Dim trackingDate As String = Date.Now().ToString("G")

        Try
            Dim conString As String
            conString = ConfigurationManager.ConnectionStrings("SSFDBConnectionString").ConnectionString
            Dim sqlCon As New SqlConnection(conString)
            Dim cmd As New SqlCommand


            Select Case trackingPage

                Case "gallery"

                    cmd.CommandType = CommandType.Text
                    cmd.CommandText = "INSERT INTO UserTrackGallery VALUES ('" & trackingIP & "', '" & trackingItem & "', '" & trackingDate & "')"
                    cmd.Connection = sqlCon

                    If sqlCon.State = ConnectionState.Closed Then
                        sqlCon.Open()
                    End If

                    cmd.ExecuteNonQuery()

                    If sqlCon.State = ConnectionState.Open Then
                        sqlCon.Close()
                    End If

                Case "products"

                Case "search"

            End Select


        Catch ex As Exception

        End Try

        Response.Close()
    End If

End Sub
在本地开发中,这非常适合我记录每次按钮点击一次数据库写入。但是,在服务器上,每个post都会生成1到7次数据库写入

我已经找了几天的解决办法,但都没有用。非常感谢您的帮助

------------------------------更新--------------------------------

我试图通过创建一个只包含一个按钮的VB.Net页面来简化此过程:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="javascript.aspx.vb" Inherits="gallery_javascript" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="../Scripts/jquery-1.4.2.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {
           $.ajaxSetup({ async: false });
           $(".optionClick").click(function () {
                $.post("../tracking/RecordClick.aspx?page=gallery&type=click&item=XYZ");
           });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input id="Button1" type="button" class="optionClick" value="button" />
    </div>
    </form>
</body>
</html>
我也试过:

url = "../tracking/RecordClick.aspx?page=gallery&type=click&item=XYZ";
if (window.XMLHttpRequest) { // Non-IE browsers
     req = new XMLHttpRequest();
     try {
          req.open("POST", url, false);
     } catch (e) {
          alert(e);
     }
     req.send(null);
} else if (window.ActiveXObject) { // IE
     req = new ActiveXObject("Microsoft.XMLHTTP");
     if (req) {
          req.open("POST", url, false);
          req.send();
     }
}
上面的每个javascript块都按预期在本地工作,但以相同的方式失败,出现多个DB写入和Firebug“中止”状态

如果我通过浏览器直接调用url+querystring,一切都会正常工作

这可能与某种延迟有关,因为它在本地工作? 谢谢你迄今为止的帮助


(编辑)还尝试在上面的代码中使用完整路径url-没有改进。

我建议跟踪问题

1) 使用Firefox+Firebug,打开NET选项卡,观察发送了多少请求


2) 将AJAX URL粘贴到浏览器的地址栏中,然后查看服务器上发生了什么。通过这种方式,您可以确保只发出一个请求。

我建议跟踪问题

1) 使用Firefox+Firebug,打开NET选项卡,观察发送了多少请求


2) 将AJAX URL粘贴到浏览器的地址栏中,然后查看服务器上发生了什么。通过这种方式,您可以确保只发出一个请求。

您是否尝试在post调用中使用站点根目录的完整路径…而不是使用“./”

可疑代码:

$(".optionClick").click(function () {
                $.post("../tracking/RecordClick.aspx?page=gallery&type=click&item=XYZ");
           });

尝试删除“.”并将其替换为实际路径…我怀疑这可能会导致您的问题。

您是否尝试在post调用中使用站点根目录的完整路径…而不是使用“./”

可疑代码:

$(".optionClick").click(function () {
                $.post("../tracking/RecordClick.aspx?page=gallery&type=click&item=XYZ");
           });

尝试删除“.”并将其替换为实际路径…我怀疑这可能会导致您的问题。

我找到了解决问题的方法。较新版本的.Net似乎阻止了HTTP POST调用,但localhost允许这样做(这就是为什么它可以在本地完美工作的原因)。HTTPWatch和Firebug都显示了.aspx页面连接,但没有返回响应。似乎多次呼叫都是为了接收响应而进行的重试尝试

我的解决方案是创建一个web服务:

Option Strict On
Imports System.Data.SqlClient
Imports System.Data
Imports System
Imports System.Net
Imports System.Text
Imports System.IO
Imports System.Web.HttpContext
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols

' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
<System.Web.Script.Services.ScriptService()> _
<WebService(Namespace:="http://mywebsite.com/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class RecordClick
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function RecordClick() As String

        Dim trackingPage As String = ""
        Dim trackingIP As String = ""
        Dim trackingType As String = ""
        Dim trackingItem As String = ""
        Dim trackingDate As String = ""


        With HttpContext.Current
            trackingPage = .Request.Params.Item(0)
            trackingIP = .Request.UserHostAddress
            trackingType = .Request.Params.Item(1)
            trackingItem = .Request.Params.Item(2)
            trackingDate = Date.Now().ToString("G")
        End With    

            Dim conString As String
            conString = ConfigurationManager.ConnectionStrings("SSFDBConnectionString").ConnectionString
            Dim sqlCon As New SqlConnection(conString)
            Dim cmd As New SqlCommand
            cmd.Connection = sqlCon

            cmd.CommandType = CommandType.StoredProcedure
            cmd.CommandText = "spInsertRecordClick"

            cmd.Parameters.Add("@IPAddress", SqlDbType.NVarChar, 50)
            cmd.Parameters("@IPAddress").Direction = ParameterDirection.Input
            If trackingIP = "" Then
                cmd.Parameters("@IPAddress").Value = DBNull.Value
            Else
                cmd.Parameters("@IPAddress").Value = trackingIP
            End If

            cmd.Parameters.Add("@CaseOption", SqlDbType.NVarChar, 50)
            cmd.Parameters("@CaseOption").Direction = ParameterDirection.Input
            If trackingItem = "" Then
                cmd.Parameters("@CaseOption").Value = DBNull.Value
            Else
                cmd.Parameters("@CaseOption").Value = trackingItem
            End If

            cmd.Parameters.Add("@TimeDate", SqlDbType.DateTime)
            cmd.Parameters("@TimeDate").Direction = ParameterDirection.Input
            If trackingDate = "" Then
                cmd.Parameters("@TimeDate").Value = DBNull.Value
            Else
                cmd.Parameters("@TimeDate").Value = trackingDate
            End If

            cmd.Parameters.Add("@ViewType", SqlDbType.NChar, 10)
            cmd.Parameters("@ViewType").Direction = ParameterDirection.Input
            If trackingType = "" Then
                cmd.Parameters("@ViewType").Value = DBNull.Value
            Else
                cmd.Parameters("@ViewType").Value = trackingType
            End If

            cmd.Parameters.Add("@Page", SqlDbType.NVarChar, 50)
            cmd.Parameters("@Page").Direction = ParameterDirection.Input
            If trackingPage = "" Then
                cmd.Parameters("@Page").Value = DBNull.Value
            Else
                cmd.Parameters("@Page").Value = trackingPage
            End If

            Try
                If sqlCon.State = ConnectionState.Closed Then
                    sqlCon.Open()
                End If

                cmd.ExecuteNonQuery()


            Catch ex As Exception

            Finally
                If sqlCon.State = ConnectionState.Open Then
                    sqlCon.Close()
                End If

            End Try

            If sqlCon.State = ConnectionState.Open Then
                sqlCon.Close()
            End If

        Return "Success"

    End Function

End Class
 $.ajax({
        type: "POST",
        url: "../tracking/RecordClick.asmx/RecordClick",
        data: "page=" + DMOriginatingPage + "&type=" + DMType + "&item=" + DMtitle
    });
我必须将以下内容添加到web.config的system.web部分:

    <webServices>
        <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
        </protocols>
    </webServices>


它现在工作得很好。我在这方面不是很有经验,所以可能有更好的解决方案。然而,也许这会帮助其他人——我花了两周时间才弄明白这一点

我找到了解决问题的办法。较新版本的.Net似乎阻止了HTTP POST调用,但localhost允许这样做(这就是为什么它可以在本地完美工作的原因)。HTTPWatch和Firebug都显示了.aspx页面连接,但没有返回响应。似乎多次呼叫都是为了接收响应而进行的重试尝试

我的解决方案是创建一个web服务:

Option Strict On
Imports System.Data.SqlClient
Imports System.Data
Imports System
Imports System.Net
Imports System.Text
Imports System.IO
Imports System.Web.HttpContext
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols

' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
<System.Web.Script.Services.ScriptService()> _
<WebService(Namespace:="http://mywebsite.com/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class RecordClick
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function RecordClick() As String

        Dim trackingPage As String = ""
        Dim trackingIP As String = ""
        Dim trackingType As String = ""
        Dim trackingItem As String = ""
        Dim trackingDate As String = ""


        With HttpContext.Current
            trackingPage = .Request.Params.Item(0)
            trackingIP = .Request.UserHostAddress
            trackingType = .Request.Params.Item(1)
            trackingItem = .Request.Params.Item(2)
            trackingDate = Date.Now().ToString("G")
        End With    

            Dim conString As String
            conString = ConfigurationManager.ConnectionStrings("SSFDBConnectionString").ConnectionString
            Dim sqlCon As New SqlConnection(conString)
            Dim cmd As New SqlCommand
            cmd.Connection = sqlCon

            cmd.CommandType = CommandType.StoredProcedure
            cmd.CommandText = "spInsertRecordClick"

            cmd.Parameters.Add("@IPAddress", SqlDbType.NVarChar, 50)
            cmd.Parameters("@IPAddress").Direction = ParameterDirection.Input
            If trackingIP = "" Then
                cmd.Parameters("@IPAddress").Value = DBNull.Value
            Else
                cmd.Parameters("@IPAddress").Value = trackingIP
            End If

            cmd.Parameters.Add("@CaseOption", SqlDbType.NVarChar, 50)
            cmd.Parameters("@CaseOption").Direction = ParameterDirection.Input
            If trackingItem = "" Then
                cmd.Parameters("@CaseOption").Value = DBNull.Value
            Else
                cmd.Parameters("@CaseOption").Value = trackingItem
            End If

            cmd.Parameters.Add("@TimeDate", SqlDbType.DateTime)
            cmd.Parameters("@TimeDate").Direction = ParameterDirection.Input
            If trackingDate = "" Then
                cmd.Parameters("@TimeDate").Value = DBNull.Value
            Else
                cmd.Parameters("@TimeDate").Value = trackingDate
            End If

            cmd.Parameters.Add("@ViewType", SqlDbType.NChar, 10)
            cmd.Parameters("@ViewType").Direction = ParameterDirection.Input
            If trackingType = "" Then
                cmd.Parameters("@ViewType").Value = DBNull.Value
            Else
                cmd.Parameters("@ViewType").Value = trackingType
            End If

            cmd.Parameters.Add("@Page", SqlDbType.NVarChar, 50)
            cmd.Parameters("@Page").Direction = ParameterDirection.Input
            If trackingPage = "" Then
                cmd.Parameters("@Page").Value = DBNull.Value
            Else
                cmd.Parameters("@Page").Value = trackingPage
            End If

            Try
                If sqlCon.State = ConnectionState.Closed Then
                    sqlCon.Open()
                End If

                cmd.ExecuteNonQuery()


            Catch ex As Exception

            Finally
                If sqlCon.State = ConnectionState.Open Then
                    sqlCon.Close()
                End If

            End Try

            If sqlCon.State = ConnectionState.Open Then
                sqlCon.Close()
            End If

        Return "Success"

    End Function

End Class
 $.ajax({
        type: "POST",
        url: "../tracking/RecordClick.asmx/RecordClick",
        data: "page=" + DMOriginatingPage + "&type=" + DMType + "&item=" + DMtitle
    });
我必须将以下内容添加到web.config的system.web部分:

    <webServices>
        <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
        </protocols>
    </webServices>


它现在工作得很好。我在这方面不是很有经验,所以可能有更好的解决方案。然而,也许这会帮助其他人——我花了两周时间才弄明白这一点

这是在一个我们可以看到代码运行的公共站点上吗?你能提供按钮的标记吗,就像你有另一个元素与该类一起使用一样?是的,多个元素共享同一个类,我最初认为这可能是问题所在。为了进行测试,我使用了另一个元素的ID并产生了相同的结果。抱歉,没有使用实际的按钮,而是充当图像按钮:Sam-当前未公开。很抱歉。这是在一个公共站点上,我们可以看到代码正在运行吗?您可以提供按钮的标记,就像您有另一个元素与该类一起使用吗?是的,多个元素共享同一个类,我最初认为这可能是问题所在。为了进行测试,我使用了另一个元素的ID并产生了相同的结果。抱歉,没有使用实际的按钮,而是充当图像按钮:Sam-当前未公开。对不起,好主意。谢谢选项1显示一些中止状态,然后是2或3个“200 OK”响应。看起来我的问题出在javascript方面,但我无法确定到底出了什么问题。我已经尝试了其他几种post方法,现在可以使用了。谢谢。这让我找到了解决办法。我页面上的其他一些Javascript导致了这个问题,多亏了Firebug,我最终能够纠正它。我的故障排除库中添加了一个新工具。:)谢谢好吧,我以为我被打败了,但我错了。同样的问题也存在。Firebug在本地工作时显示“200 OK”响应,但一旦在服务器上工作,我就会收到“中止”响应。VB.Net功能仍然会被调用并写入数据库,但问题是调用了很多次。我更新了我的原始帖子,以反映更多的故障排除工作。好主意。谢谢选项1显示一些中止状态,然后是2或3个“200 OK”响应。看起来我的问题出在javascript方面,但我无法确定到底出了什么问题。我已经尝试了其他几种post方法,现在可以使用了。谢谢。这让我找到了解决办法。我页面上的其他一些Javascript导致了这个问题,多亏了Firebug,我最终能够纠正它。我的故障排除库中添加了一个新工具。:)谢谢好吧,我以为我有这个