调用服务时不会触发 Ajax 成功事件
本文关键字:Ajax 成功 事件 服务 调用 | 更新日期: 2023-09-27 18:30:56
我正在使用JQuery为本地服务制作AJAX。 我的本地服务是HttpHandler(例如Request.ashx)。 在 Request.ashx 中,它的职责是调用外部网站(例如,CallExternalWebsite())。 CallExternalWebsite() 使用 .NET 的 System.Net.WebRequest() 来发起请求。 访问外部网站时,不会触发成功或错误事件。 (注意:我也尝试过这是在 IIS 中承载的 WCF 服务。 我看到了相同的结果)
以下是两种情况:
此方案适用于:
- 在 ProcessRequest() 中,注释掉 callExternalWebsite()。
- 对于对象 o,使用数据初始化以模拟结果。
- 点击我的按钮
- 成功事件在客户端上触发。
- 在Fiddler中,我可以看到标题信息。 我看到 Json 结果等。
此方案不起作用:
- 在 ProcessRequest() 中,启用对 callExternalWebsite() 的调用。
- 对于对象 o,callExternalWebsite() 将返回一个适当的对象。
- 点击我的按钮
- 成功事件不会在客户端上触发。
- 在Fiddler中,我可以看到标题信息。 我看到 Json 结果等。
- 我知道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);
}
有什么想法吗?
谢谢。
史蒂夫
如果你这样做会发生什么,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
});
});
});