jQuery的 – 返回值使用ajax成功的结果

我有一个jQuery $ .ajax()函数的小问题。

我有一个表单,每次点击单选button或从下拉菜单select创build一个会话variables与选定的值。

现在 – 我有一个下拉菜单有4个选项 – 第一个(标签为None)有一个值=“”其他有他们的ID。

我想要发生的是无select(空值)删除会话和其他创build一个,但只有具有此特定select名称的会话尚不存在 – 因为所有其他选项具有相同的数量分配给它 – 这只是表明select了哪一个。

我不确定这是否有意义 – 但看看代码 – 也许这会更清楚:

$("#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_onsselect菜单触发“改变”时,我们从几个元素得到一些值来计算。

我们从我们的select中获得选项的标签属性,这个选项存储要添加到总数中的值,select的名字用这个名字和值来创build会话,以便稍后检查哪一个被选中。

现在我们检查一下val ==“”(表示None选项是否被选中),我们从总数中扣除这个数量,同时删除这个select的名字。

在这之后,问题就开始了 – else语句。

否则 – 我们要检查带有我们select器名称的isSession()函数是否返回0或1 – 如果它返回0,那么我们将存储在label属性中的值加起来,但是如果返回1,该会话已经存在 – 那么我们只通过重新创build来更改此会话的值 – 但是数量不会被添加到该会话中。

现在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”是否会返回函数的结果 – 因为它似乎不工作 – 但是,如果我把“数据”成功:部分放入警报 – 它似乎返回正确的价值。

有谁知道如何从函数中返回值,然后在下一个语句中进行比较?


谢谢你们 – 我尝试了以下方法:

 function isSession(selector) { $.ajax({ type: "POST", url: '/order.html', data: ({ issession : 1, selector: selector }), dataType: "html", success: function(data) { updateResult(data); }, error: function() { alert('Error occured'); } }); } 

那么updateResult()函数:

function updateResult(data){result = data; }

结果 – 是全局variables – 然后我试图读取:

 $("#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 { isSession(name); if(result == 0) { var price = parseInt(order_price_addon) + parseInt(add); } setSession(name, val); } $(".order_price_addon").html(price); setSession('order_price_addon', price); updateTotal(); }); 

但由于某种原因 – 这是行不通的 – 有什么想法?

麻烦的是,你不能从一个asynchronous调用返回一个值,像一个AJAX请求,并期望它的工作。

原因是等待响应的代码已经在收到响应的时候执行了。

解决这个问题的办法是在success: 内部运行必要的代码success:callback。 这样,只有在data可用时才能访问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:调用一个函数success:当数据可用时传递数据的callback函数。

 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 } 

有很多方法来获得jQuery Ajax响应。 我与你们分享两个共同的方面:

第一:

使用async = false并在函数内返回ajax对象,然后得到响应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方法并创build一个像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); 

你可以把它做得像你想要的那么大

我在这里看到了答案,虽然有帮助,但由于我不得不改变我的许多代码,所以它们并不是我想要的。

对我而言,是这样做的:

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

希望有助于某人

阿纳金

async: false添加到您的属性列表。 这迫使JavaScript线程等待,直到返回值被检索,然后继续前进。 很明显,在任何情况下你都不想这样做,但是如果在进行之前需要一个价值,那么这个就行了。

这是相当古老,丑陋,不要这样做。 您应该使用callback: https : //stackoverflow.com/a/5316755/591257
有同样的问题,这样解决了,使用全局variables。 不知道这是否是最好的,但肯定的作品。 如果出错,你会得到一个空string(myVar =''),所以你可以根据需要来处理。

 var myVar = ''; function isSession(selector) { $.ajax({ 'type': 'POST', 'url': '/order.html', 'data': { 'issession': 1, 'selector': selector }, 'dataType': 'html', 'success': function(data) { myVar = data; }, 'error': function() { alert('Error occured'); } }); return myVar; } 
 // Common ajax caller function AjaxCall(url,successfunction){ var targetUrl=url; $.ajax({ 'url': targetUrl, 'type': 'GET', 'dataType': 'json', 'success': successfunction, 'error': function() { alert("error"); } }); } // Calling Ajax $(document).ready(function() { AjaxCall("productData.txt",ajaxSuccessFunction); }); // Function details of success function function ajaxSuccessFunction(d){ alert(d.Pioneer.Product[0].category); } 

这可能会有所帮助,创build一个通用的ajax调用函数,并附上一个函数,当成功的时候调用ajax调用,看例子

嗨尝试asynchronous:错误在您的ajax调用..