为什么这个ajax.done()不起作用?

时间:2013-10-18 21:29:09

标签: php ajax

我正在编写一个“投注”脚本,并且正在制作一个自动化系统。

投注者可以选择增加金额或减少赢或金额。

我写的PHP脚本会丢失echo json_encode(array('result' => 'win'));或'loss'。

为什么以下代码不会更新该值的值取决于结果?

$(document).ready(function(){

      function updateValuesAuto() {
        // Grab all the value just incase they're needed.
        var multiplier_auto = $('#multiplier_auto').val();
        var percentage_auto = $('#percentage_auto').val();
        var bet_amount_auto = $('#bet_amount_auto').val();
        var profit_amount_auto = $('#profit_amount_auto').val();

            multiplier_auto = (100-1)/percentage_auto;
            profit_amount_auto = (bet_amount_auto*multiplier_auto)-bet_amount_auto;

                $('#multiplier_auto').val(multiplier_auto);
                $('#percentage_auto').val(percentage_auto);
                $('#bet_amount_auto').val(bet_amount_auto);
                $('#profit_amount_auto').val(profit_amount_auto);
      }

      $('#multiplier_auto').keyup(updateValuesAuto);
      $('#percentage_auto').keyup(updateValuesAuto);
      $('#bet_amount_auto').keyup(updateValuesAuto);
      $('#profit_amount_auto').keyup(updateValuesAuto);



var runI   = null;
var $run   =  $('#start');
var $times =  $('#amount_bets');
var $stop =  $('#stop');

$run.on('click', function() {  
  event.preventDefault();
    $(this).attr('disabled', true);
    $stop.attr('disabled', false);
    var ran = 0;
    var val = parseInt($times.val(), 10);
    if(isNaN(val) || val === 0 ) return false;

     runI = setInterval(function() {
        if( ran < val ) {    
          $.ajax({
            url: './requests/bet.php',
            type: 'POST',
            data: { amount: $('#bet_amount_auto').val(), chance: $('#percentage_auto').val(), multiplier: $('#multiplier_auto').val(), profit: $('#profit_amount_auto').val() },
          }).done(function(result) {
            var result = JSON.parse(result);
              if( result === 'win' ) {
                $('#bet_amount_auto').val() = $('#bet_amount_auto').val() * $('#wini').val();
              }
              else if( result === 'loss' ) {
                $('#bet_amount_auto').val() = $('#bet_amount_auto').val() * $('#lossi').val();
              }

              ran++;
          });
        }

        else {
           clearInterval(runI);
           $run.attr('disabled', false);
        }
    }, 500);
});

$stop.on('click', function() {
    event.preventDefault();
    clearInterval(runI);
    $run.attr('disabled', false);
});

});

感谢。

3 个答案:

答案 0 :(得分:0)

如果答案没有帮助,您可能希望将代码减少到问题的细节,但是您应该真正查看发回的数据。它将是:

{"result":"win"}

因此,要访问.done函数中的结果,您需要使用result.result

此外,如果您要发回JSON,jQuery可能会自动解析它,JSON.parse可能会导致错误。要让jQuery执行此操作,请通过PHP发送JSON内容类型标头:

header("Content-type: application/json");

答案 1 :(得分:0)

我认为问题是===,因为三个等于是一个严格的运算符,这意味着值和类型必须相等。

在您的情况下,您似乎正在尝试确保结果类型为JSON且等于STRING

尝试双等于==

编辑:

哦,现在就明白了......

实际上,您无法为函数的结果赋值。所以,

改变这个:

$('#bet_amount_auto').val() = $('#bet_amount_auto').val() * $('#wini').val();

$('#bet_amount_auto').val($('#bet_amount_auto').val() * $('#wini').val());

答案 2 :(得分:0)

两件事:

1.您无法为函数设置值(您不能将函数放在赋值的左侧)

2. result是JSON,您需要使用result.result

$.ajax({
            url: './requests/bet.php',
            type: 'POST',
            data: { amount: $('#bet_amount_auto').val(), chance: $('#percentage_auto').val(), multiplier: $('#multiplier_auto').val(), profit: $('#profit_amount_auto').val() },
          }).done(function(result) {

              if( result.result === 'win' ) {
                $('#bet_amount_auto').val($('#bet_amount_auto').val() * $('#wini').val())   ;
              }
              else if( result.result === 'loss' ) {
                $('#bet_amount_auto').val($('#bet_amount_auto').val() * $('#lossi').val())  ;
              }

              ran++;
          });