亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

jQuery-成功使用Ajax結果返回值

jQuery-成功使用Ajax結果返回值

慕桂英3389331 2019-11-12 10:17:11
我有一個jQuery $ .ajax()函數的小問題。我有一個表單,其中每次單擊單選按鈕或從下拉菜單中進行選擇都會創建具有所選值的會話變量?,F在-我有一個下拉菜單,其中有4個選項-第一個菜單(標簽為None)具有value =“”,其他具有其ID。我要執行的操作是使用None選項(具有空白值)刪除會話,并使用其他選項創建會話,但前提是不存在具有該特定選擇名稱的會話-因為所有其他選項均分配有相同的金額-只是表明選擇了哪一個。我不確定這是否有意義-但請看一下代碼-也許可以使它更清晰:$("#add_ons select").change(function() {        // get current price of the addons        var order_price_addon = $(".order_price_addon").text();        // get price of the clicked radio button from the rel attribute        var add = $(this).children('option').attr('label');        var name = $(this).attr('name');        var val = $(this).val();        if(val == "") {            var price = parseInt(order_price_addon) - parseInt(add);            removeSession(name);        } else {            if(isSession(name) == 0) {                var price = parseInt(order_price_addon) + parseInt(add);            }               setSession(name, val);                      }        $(".order_price_addon").html(price);            setSession('order_price_addon', price);                 updateTotal();});因此-首先,當#add_ons選擇菜單觸發“更改”時,我們將從一些元素中獲取一些值進行計算。我們從選擇中獲取選項的標簽屬性,該選擇存儲將要添加到總數中的值,選擇的名稱(使用此名稱創建會話)和值,以供以后檢查選擇了哪個。現在-我們檢查val ==“”(這表明已選擇“無”選項),然后從總數中扣除金額,并刪除帶有選擇名稱的會話。在這之后,問題開始了-else語句。否則-我們要檢查具有選擇器名稱的isSession()函數是否返回0或1-如果返回0,則將存儲在label屬性中的值加到總計中,但是如果返回1-這將表明該會話已經存在-那么我們只能通過重新創建來更改此會話的值-但不會添加該金額?,F在,isSession函數如下所示:function isSession(selector) {    $.ajax({        type: "POST",        url: '/order.html',        data: ({ issession : 1, selector: selector }),        dataType: "html",        success: function(data) {            return data;        },        error: function() {            alert('Error occured');        }    });}現在-問題是-我不知道使用“ return”是否會從函數中返回結果-因為它似乎不起作用-但是,如果我將“ data”放在success:部分中,警報-它似乎返回正確的值。有誰知道如何從函數中返回值,然后在下一條語句中進行比較?然后updateResult()函數:函數updateResult(data){結果=數據;}但由于某種原因-它不起作用-任何想法?
查看完整描述

3 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

問題是您不能從異步調用(如AJAX請求)返回值,并且期望它能正常工作。


原因是等待響應的代碼在接收到響應時已經執行。


解決此問題的方法是在回調內部運行必要的代碼success:。這樣,它data只有在可用時才能訪問。


function isSession(selector) {

    $.ajax({

        type: "POST",

        url: '/order.html',

        data: ({ issession : 1, selector: selector }),

        dataType: "html",

        success: function(data) {

            // Run the code here that needs

            //    to access the data returned

            return data;

        },

        error: function() {

            alert('Error occured');

        }

    });

}

另一種可能性(實際上是同一件事)是在success:回調中調用一個函數,該函數在可用時傳遞數據。


function isSession(selector) {

    $.ajax({

        type: "POST",

        url: '/order.html',

        data: ({ issession : 1, selector: selector }),

        dataType: "html",

        success: function(data) {

                // Call this function on success

            someFunction( data );

            return data;

        },

        error: function() {

            alert('Error occured');

        }

    });

}


function someFunction( data ) {

    // Do something with your data

}


查看完整回答
反對 回復 2019-11-12
?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

有很多方法可以獲取jQuery AJAX響應。我將與您分享兩種常用方法:


第一:


使用async = false并在函數內返回ajax-object并稍后獲取響應ajax-object.responseText


/**

 * jQuery ajax method with async = false, to return response

 * @param  {mix}  selector - your selector

 * @return {mix}           - your ajax response/error

 */

function isSession(selector) {

    return $.ajax({

        type: "POST",

        url: '/order.html',

        data: {

            issession: 1,

            selector: selector

        },

        dataType: "html",

        async: !1,

        error: function() {

            alert("Error occured")

        }

    });

}

// global param

var selector = !0;

// get return ajax object

var ajaxObj = isSession(selector);

// store ajax response in var

var ajaxResponse = ajaxObj.responseText;

// check ajax response

console.log(ajaxResponse);

// your ajax callback function for success

ajaxObj.success(function(response) {

    alert(response);

});

第二:


使用$ .extend 方法并創建一個像ajax這樣的新函數


/**

 * xResponse function

 *

 * xResponse method is made to return jQuery ajax response

 * 

 * @param  {string} url   [your url or file]

 * @param  {object} your ajax param

 * @return {mix}       [ajax response]

 */

$.extend({

    xResponse: function(url, data) {

        // local var

        var theResponse = null;

        // jQuery ajax

        $.ajax({

            url: url,

            type: 'POST',

            data: data,

            dataType: "html",

            async: false,

            success: function(respText) {

                theResponse = respText;

            }

        });

        // Return the response text

        return theResponse;

    }

});


// set ajax response in var

var xData = $.xResponse('temp.html', {issession: 1,selector: true});


// see response in console

console.log(xData);

您可以根據需要將其放大...


查看完整回答
反對 回復 2019-11-12
?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

我在這里看到了答案,盡管有幫助,但它們并不是我想要的,因為我不得不更改很多代碼。


對我有用的事情是在做這樣的事情:


function isSession(selector) {

    //line added for the var that will have the result

    var result = false;

    $.ajax({

        type: "POST",

        url: '/order.html',

        data: ({ issession : 1, selector: selector }),

        dataType: "html",

        //line added to get ajax response in sync

        async: false,

        success: function(data) {

            //line added to save ajax response in var result

            result = data;

        },

        error: function() {

            alert('Error occured');

        }

    });

    //line added to return ajax response

    return result;

}

希望可以幫助某人


查看完整回答
反對 回復 2019-11-12
  • 3 回答
  • 0 關注
  • 393 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號