AJAX:基于PHP脚本调用现有的JS函数/ set变量返回

时间:2016-05-24 20:10:50

标签: php ajax callback

我有一个HTML表单,我的任务是更新.. 它需要能够应用折扣代码,并且更新总数(在提交之前)

我正在使用AJAX:

  • 在表单字段中抓取用户输入的折扣代码。
  • 将此数据发送到外部.php脚本
  • .php脚本检查折扣,并返回true或false
  • 在返回此数据/(php)响应后,我设置了一个JS var,并调用现有函数来更新“页面”上的一些内容

我当前的问题是我无法设置此var .. NOR从我的AJAX调用中的return / success函数调用此现有函数。

在发布之前搜索..(据我所知,这至少部分是我的问题)..我得到AJAX是异步..并且'doMath()函数可能在php响应之前被调用/执行被送回)..

但我仍然不明白为什么var在我设置然后检查它时没有更新?在'成功'回调??

我读过将async设置为false ..

如:

$.ajax({
   async: false,
   type: "POST",

但也读到这是一种不好的方法,应该避免..

当所有'说完了'时,是否有一个不同或更好的回调?而不是使用成功或许?

重新上限:

  • 无法设置AJAX功能的var OUTSIDE / call
  • 无法执行/调用现有功能

这是PHP所需的情况(完整披露)

$dicountcode = 'code_to_match';
$submittedDiscount = $_POST['var1'];

if($submittedDiscount == $dicountcode){
    //echo 'TRUE: '.$submittedDiscount;
    echo 'true';
}else{
    //echo 'False: '.$submittedDiscount;
    echo 'false';
}

实际上,大多数AJAX都在上述两个项目之外工作。

这是我的代码/方法:

<script type="text/JavaScript" language="JavaScript">

var doDiscount = false;

//math operations
function dothemath() {  
    //do some math stuff here
    //update the page with the new 'amount'

    //** uses the above doDiscount var status to knwo wheather to apply a discount or not
}


function applyDiscount(){
    //make ajax call and send data to PHP script for discount checking
        alert("'else' routine executed...");
        $.ajax({
            //async: false,
            type: "POST",
            url: "conservationmanual_discount.php",
            //datatype: "html",
            datatype: "text",
            data:{
                //var1: "My Discount Code"
                "disCode": $('#discountcode').val()
            },
            success: function(response) {
                alert("PHP RETURN CHECK: "+response);
                if(response == "true"){
                    alert("Discount Code is Valid.");
                    //update var
                    doDiscount = true;
                    //update discount status icon
                    $("#discountStaus").html(
                        "<img src='greencheck.png' />"
                    );

                    //check doDiscount status after 'update'
                    console.log("DO DISCOUNT STATUS: "+doDiscount);
                    //calculate/update total:
                    dothemath();
                }else{
                    alert("Discount Code is not Valid.");
                    //update discount status icon
                    $("#discountStaus").html(
                        "<img src='redx.png' />"
                    );
                    //leave as is/do nothing
                    console.log("DO DISCOUNT STATUS: "+doDiscount);
                }
            }
        });
    }




</script>

更新

此外..我调试越深,我似乎无法在条件检查中使用响应。

即:

success: function(response) {
                    alert("PHP RETURN CHECK: "+response);
                    if(response == "true"){
                        alert("Discount Code is Valid.");
                        //update var
                        doDiscount = true;
                        //update discount status icon
                        $("#discountStaus").html(
                            "<img src='greencheck.png' />"
                        );

                        //check doDiscount status after 'update'
                        console.log("DO DISCOUNT STATUS: "+doDiscount);
                        //calculate/update total:
                        dothemath();

如何在条件中使用PHP响应/返回数据?

response == "true"

似乎永远不是真的吗?虽然我的警告,显示“回应”是真的:

alert("PHP RETURN CHECK: "+response);

但是它之后的直接条件检查总是假的??? (probbaly为什么我无法正确设置var?

1 个答案:

答案 0 :(得分:0)

我建议您将所需的doDiscount值传递给dotheMath()函数。我没有看到任何令人信服的理由让您将价值存储在全球范围内。这种变化可能很简单:

所以数学函数可能如下所示:

function dothemath(doDiscount) {
   //
}

您的成功处理程序可能如下所示:

    success: function(data) {
        dotheMath(data);
    }

请注意,我没有任何条件,因为我假设dotheMath()函数会处理true和false两种情况,因为这是你想要通过doDiscount变量做的事情