Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 让脚本提供布尔值';答案';到jQuery';s.load()方法_Php_Javascript_Jquery_Ajax - Fatal编程技术网

Php 让脚本提供布尔值';答案';到jQuery';s.load()方法

Php 让脚本提供布尔值';答案';到jQuery';s.load()方法,php,javascript,jquery,ajax,Php,Javascript,Jquery,Ajax,一个可能更具推测性的快速问题。最近,为了处理我的web应用程序中的所有ajax,我开始大量使用jquery 现在我正在用PHP构建一个竞价系统,大量使用mod_rewrite。我使用带有确认对话框的jQuery发送Ajax请求,该请求将花费用户的一些预存积分用于出价。ajax支出请求将cost作为post参数发送给PHP控制器,该控制器花费用户信用,然后回显输出,jQuery将输出放回文档中 它工作得很好,但我想知道的是,如果用户信用不足,是否有更好的方法让jQuery处理拒绝购买的问题。现在,

一个可能更具推测性的快速问题。最近,为了处理我的web应用程序中的所有ajax,我开始大量使用jquery

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

它工作得很好,但我想知道的是,如果用户信用不足,是否有更好的方法让jQuery处理拒绝购买的问题。现在,我有一个回应的php,它显示了一个链接到存款页面的消息。。。但我宁愿让重定向自动发生

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


感谢并抱歉给出了这么长的解释。

如果回调函数类似于“function(data){”,那么您可以返回“NSF”或类似的内容,只需将“data”与“NSF”进行比较,然后使用window.location进行重定向。如果每次投标都需要转到其他地方,那么首先为什么要使用AJAX呢

不管怎样,如果你看一下,你会发现load()并不是唯一可用的函数。大多数函数都是的简化版本;如果你使用这个函数,你可以从那里控制所有可能的事件。不需要弄乱HTTP头

我建议您重新设计服务器端脚本,使其返回JSON对象。然后,您可以发回所有不同类型的响应:

{
    biddingSuccessful: true,
    linkToDepositPage: "http://example.com",
    textToDisplay: "Your bidding was successful"
}

使用较低级别的
$.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对象或纯文本,指示错误是什么。并且有一个标头正好显示您要查找的内容。它是:)

将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);
        }
    });    
}

这是IMO最好的解决方案。非常感谢您的指导。这很有魅力,也有助于一些错误处理!@Deacondespreado-非常欢迎。我很高兴这很有帮助:)只需一个问题,我已经按照您描述的结构构造了所有内容-如何向回调传递额外的参数以允许我的回调ffunction知道在成功的情况下更新哪个div吗?@DeaconDesperado-这是来自服务器的额外参数,还是在发出请求时您事先知道的?另外,在写评论时,如果您输入@UserName,它将为用户生成通知:)@Anurag-来自确认对话框-我会发布代码b但是它在注释中变得非常丑陋-我应该打开一个新问题吗?基本上,对确认对话框的肯定回答会激活使用您给我的代码的函数,并且这个匿名函数会获取我需要更新的元素标识符。我需要一种方法将其传递到success anon函数中,而不破坏argujquery自动将响应提交给已识别成功回调的消息。我说得通吗?对不起。
function makeAJAXCall(elementName) {
    $.ajax({
        success: function(...) {
            // elementName is available here through a closure
            alert(elementName);
        }
    });    
}