【发布时间】: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