单击XMLHttpRequest在发出另一个请求之前先清除响应

时间:2019-07-02 07:42:19

标签: javascript jquery ajax xmlhttprequest

我有一个XMLHttpRequest请求,该请求通过API退还了运输费用。

我在单击按钮时激活了请求。当我要求另一个报价时,打印的响应与第一个请求相同,但是在控制台中可以看到不同的数据。

为什么我看不到正确的回复? 我如何总是只打印更新后的请求?

$(“ #checkers”).click(function(){

 PlansSubscriptions::whereBetween('starts_on', ["2019-07-30", "2019-07-26"]);
                 ->orWhereBetween('expires_on', ["2019-07-20", "2019-07-22"]);
                 ->get();

PHP部分:

var myKey = "xxxxx";
var name = $('#Inputfield_pad_firstname').val();
var company = $('#Inputfield_company_name').val();
var street1 = $('#Inputfield_pad_address').val();


var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
    if (this.readyState == 1) {
        $('#wrap_Inputfield_shipping_choose').css("opacity",".4");
        $('#Inputfield_shipping_choose_1').nextAll().remove();
        $('#Inputfield_shipping_choose_2').nextAll().remove();
    }
    if (this.readyState == 4) {
        console.log( this.response );
        $('#wrap_Inputfield_shipping_choose').css("opacity","1");
        $('#Inputfield_shipping_choose_1').after("<p>JS<b><?= $rate['Rates'][0]['carrier_label'] ?></b> costo: <?= $rate['Rates'][0]['rate'] ?> Tempo<?= $rate['Rates'][0]['delivery_days'] ?></p>");
        $('#Inputfield_shipping_choose_2').after("<p>JS<b><?= $rate['Rates'][1]['carrier_label'] ?></b> costo: <?= $rate['Rates'][1]['rate'] ?> Tempo<?= $rate['Rates'][1]['delivery_days'] ?></p>");
    }
};
xhttp.responseType = 'json';
xhttp.open("POST", 'https://www.xxxxx.it/form/getRates.php', true);
xhttp.send(JSON.stringify({
            'Method' : 'GetRates',
            'Params' : {
            .... data ...
        }
    })
);

2 个答案:

答案 0 :(得分:0)

您似乎没有使用通过api检索的数据更新ui。

我假设这2行应该进行更新,对吧?

$('#Inputfield_shipping_choose_1').after("<p>JS<b><?= $rate['Rates'][0]['carrier_label'] ?></b> costo: <?= $rate['Rates'][0]['rate'] ?> Tempo<?= $rate['Rates'][0]['delivery_days'] ?></p>");
$('#Inputfield_shipping_choose_2').after("<p>JS<b><?= $rate['Rates'][1]['carrier_label'] ?></b> costo: <?= $rate['Rates'][1]['rate'] ?> Tempo<?= $rate['Rates'][1]['delivery_days'] ?></p>");

您应该使用this.response而不是<?= ... ?>的数据更新它们。

答案 1 :(得分:0)

这是正确的答案:

$('#Inputfield_shipping_choose_1').after("<p><b>" +this.response.Rates[0].carrier_label+ "</b> costo: "+ this.response.Rates[0].rate+" Tempo "+ this.response.Rates[0].delivery_days+"</p>");

错误是语法错误。