调用服务时不会触发 Ajax 成功事件

本文关键字:Ajax 成功 事件 服务 调用 | 更新日期: 2023-09-27 18:30:56

我正在使用JQuery为本地服务制作AJAX。 我的本地服务是HttpHandler(例如Request.ashx)。 在 Request.ashx 中,它的职责是调用外部网站(例如,CallExternalWebsite())。 CallExternalWebsite() 使用 .NET 的 System.Net.WebRequest() 来发起请求。 访问外部网站时,不会触发成功或错误事件。 (注意:我也尝试过这是在 IIS 中承载的 WCF 服务。 我看到了相同的结果

以下是两种情况:

此方案适用于:

  1. 在 ProcessRequest() 中,注释掉 callExternalWebsite()。
  2. 对于对象 o,使用数据初始化以模拟结果。
  3. 点击我的按钮
  4. 成功事件在客户端上触发。
  5. 在Fiddler中,我可以看到标题信息。 我看到 Json 结果等。

此方案不起作用:

  1. 在 ProcessRequest() 中,启用对 callExternalWebsite() 的调用。
  2. 对于对象 o,callExternalWebsite() 将返回一个适当的对象。
  3. 点击我的按钮
  4. 成功事件不会在客户端上触发。
  5. 在Fiddler中,我可以看到标题信息。 我看到 Json 结果等。
  6. 我知道callExternalWebsite()正在工作,因为我让它将结果发送到我的手机。

总而言之,HttpHandler 中的外部 http 调用正在影响 Ajax 成功事件。

以下是 AJAX 调用的一个片段:(我正在尝试不同的交互)

    $(document).ready(function () {
        $("#myButton").click(function (event) {
            $.ajax({
                cache: false,
                type: "POST",
                url: "http://localhost/Service/Request.ashx",
                data: '{"id" : "053252f3"}',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                timeout: 20000,
                success: function (msg) {
                    AjaxSucceeded(msg);
                },
                error: AjaxFailed
            });
        });
    });

在 HttpHandler Request.ashx 中,

public Void ProcessRequest(httpContent context)
{
//  Do some stuff....
// Make call to external web site
object o = callExternalWebsite (Uri, Data, "POST");
// Return results from callOtherWebsite 
        JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
        string json = javaScriptSerializer.Serialize(o);
        context.Response.ContentType = "application/json";
        context.Response.Write(json);
}

有什么想法吗?

谢谢。

史蒂夫

调用服务时不会触发 Ajax 成功事件

如果你这样做会发生什么,msg vs msg.d:

$(document).ready(function () {
    $("#myButton").click(function (event) {
        $.ajax({
            cache: false,
            type: "POST",
            url: "http://localhost/Service/Request.ashx",
            data: '{"id" : "053252f3"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            timeout: 20000,
            success: function (msg) {
                AjaxSucceeded(msg.d);
            },
            error: AjaxFailed
        });
    });
});