一个可能更具投机性的快速问题。我最近一直在沉溺于jquery来处理我的网络应用程序中的所有ajax。
现在我正在用PHP建立一个大量使用mod_rewrite的竞价系统。我正在使用带有确认对话框的jQuery来发送一个Ajax请求,该请求将在出价中花费一些用户的预先存储的信用。将花费的ajax请求作为post参数发送给PHP控制器,该控制器花费用户信用,然后回显输出,然后jQuery将其放回到文档中。
它工作正常,但我想知道的是,如果有一个更好的方法让jQuery处理拒绝购买,如果用户没有足够的信用。现在我有一个回复的回应显示此消息,并带有一个存入页面的链接...但我宁愿自动重定向。
在.load完成之前,是否有某种方式可以通过成功或失败的布尔通知我的jQuery脚本,然后在失败的情况下重定向?可能通过HTTP头确定处理?我能想到的唯一方法是在html元素中放置true或false,在.load()之后检入回调,如果是false,则执行重定向。
感谢和抱歉解释的长度。
答案 0 :(得分:2)
如果每次竞标都需要去其他地方,为什么要首先使用AJAX?
无论如何,如果你看jQuery's API documentation,你会发现load()不是唯一可用的功能。大多数是ajax()的简化版本;如果你使用这个,你可以从那里控制所有可能的事件。无需弄乱HTTP标头!
我建议您重新设计服务器端脚本,以便返回JSON对象。然后,您可以发回所有不同类型的回复:
{
biddingSuccessful: true,
linkToDepositPage: "http://example.com",
textToDisplay: "Your bidding was successful"
}
答案 1 :(得分:1)
使用较低级别的$.ajax
来完全控制请求。理想情况下,不是发送成功2xx响应,而是发送错误响应,该错误响应将自动发送到您的错误回调。
$.ajax({
url: '..',
success: function() {
// if it gets here, then assume credits were used
},
error: function() {
// some error happened
// if error was about insufficient funds, then redirect
}
});
从服务器,立即发送成功响应。但是,对于错误,请更改响应标头,并发送指示错误内容的JSON对象或纯文本。并且有一个标题可以满足您的需求。这是402 - Payment Required
:)
header('HTTP/1.1 402 Payment Required');
发送一个JSON对象作为响应,并提供更多详细信息:
{
status: 'error',
reason: 'Insufficient Funds',
balance: '$2.78',
amountRequested: '$3.50'
}
对于更新的注释,您需要使用闭包(比全局变量更好:) 假设外部函数获取元素名称/ ID,通过成功回调中的闭包来包装该值。如果这不是你想要的,请告诉我。
function makeAJAXCall(elementName) {
$.ajax({
success: function(...) {
// elementName is available here through a closure
alert(elementName);
}
});
}
答案 2 :(得分:0)
如果回调函数类似于“function(data){”那么你可以返回“NSF”或类似的东西,并简单地将'data'与'NSF'进行比较,并使用window.location进行重定向