【问题标题】:Why is the Image Handler not called with an AJAX client?为什么不使用 AJAX 客户端调用图像处理程序?
【发布时间】:2014-09-19 20:08:39
【问题描述】:

请看下面的代码:

Public Class Default4
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim image1 As Image = Default4.GetSQLTable
        OtherBits.Controls.Add(image1)
    End Sub

    <System.Web.Services.WebMethod()> _
    Public Shared Function GetSQLTable() As Image
        Dim Image1 As New Microsoft.Web.GeneratedImage
        Image1.ImageHandlerUrl = "ImageHandler1.ashx?id=1"
        Return Image1
    End Function

End Class

代码运行后,网页上有一张图片(OtherBits 是占位符)。

我想在客户端使用 AJAX 检索图像,即 AJAX 将调用一个函数(获取 SQL 表),该函数调用图像处理程序。这是客户端代码:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/LGMaster.master" CodeBehind="Default4.aspx.vb" Inherits="com.app.PresentationLayer.Web.Default4" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">




     <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js"></script>
    <script type = "text/javascript">

        function GetSQLTable() {
                $.ajax({
                    type: "POST",
                    url: "Default4.aspx/GetSQLTable",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: OnSuccess(),
                    failure: function (response) {
                        alert('there was an error loading the webpage')
                    }
                });
            function OnSuccess() {
                return function (response) {
                       document.getElementById('test_div').innerHTML = response.d;
                }
            }
        }
        window.onload = GetSQLTable
    </script> 

    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
        <div id="test_div">
    </div>

        <asp:PlaceHolder runat="server" ID="OtherBits" />

    </asp:Content>

我已经在 ImageHandler 中放置了一个断点,如果客户端是 AJAX,我可以确认它不会被调用。为什么不使用 AJAX 客户端调用图像处理程序?记录对图像处理程序的所有调用。我可以确认它肯定没有被调用。

【问题讨论】:

  • AJAX 请求是否被调用?服务器的响应是什么?
  • @David,谢谢。我在 GetSQLTable(服务器端函数)中放置了一个断点。它被 Ajax 明确调用。服务器端函数 (GetSQLTable) 未调用 ImageHandler。
  • 我不确定Microsoft.Web.GeneratedImage 是什么,但我不希望这个服务器端代码“调用图像处理程序”。这会返回一些标记,然后浏览器会根据 URL 向图像处理程序发送请求吗?你的OnSuccess 客户端函数被调用了吗? response.d 中有什么内容?您是否按预期成功更新了标记?
  • 对不起,这是我的术语。图像在后面的代码中创建并添加到占位符中。服务端代码不直接调用ImageHandler。
  • 此时您将返回客户端调试,其中不存在“占位符”之类的东西。您是否在客户端成功处理程序中进行过任何调试?您需要确保客户端标记(您的 test_div 元素)按照您期望的方式更新。

标签: jquery asp.net ajax vb.net image


【解决方案1】:

我不确定,但我认为这可能与共享功能的限制有关(我说我不确定) 但是您是否尝试在 ASHX 中创建图像,完全删除 GetSQLTable 并将 ajax URL 设置为:

url: "ImageHandler1.ashx?id=1",

而不是:

url: "Default4.aspx/GetSQLTable",

为什么需要 GetSQLTable?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 2017-08-27
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    相关资源
    最近更新 更多