让脚本为jQuery的.load()方法提供一个布尔“答案”

时间:2010-07-15 19:05:39

标签: php javascript jquery ajax

一个可能更具投机性的快速问题。我最近一直在沉溺于jquery来处理我的网络应用程序中的所有ajax。

现在我正在用PHP建立一个大量使用mod_rewrite的竞价系统。我正在使用带有确认对话框的jQuery来发送一个Ajax请求,该请求将在出价中花费一些用户的预先存储的信用。将花费的ajax请求作为post参数发送给PHP控制器,该控制器花费用户信用,然后回显输出,然后jQuery将其放回到文档中。

它工作正常,但我想知道的是,如果有一个更好的方法让jQuery处理拒绝购买,如果用户没有足够的信用。现在我有一个回复的回应显示此消息,并带有一个存入页面的链接...但我宁愿自动重定向。

在.load完成之前,是否有某种方式可以通过成功或失败的布尔通知我的jQuery脚本,然后在失败的情况下重定向?可能通过HTTP头确定处理?我能想到的唯一方法是在html元素中放置true或false,在.load()之后检入回调,如果是false,则执行重定向。

感谢和抱歉解释的长度。

3 个答案:

答案 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进行重定向