这是js
$(document).ready(function() {
$("#quantity").change(function()
{
hash = $("#quantity").val(); //returns 0001 (ex)
qPrice_price = ajaxCall(hash);
alert(qPrice_price);
});
});
function ajaxCall(hash)
{
$.get("ajax.php", { id: hash },
function(data)
{
return parseInt(data.price);
}, "json");
}
ajax.php的网址如下:ajax.php?id = 0001返回此{“price”:“5”} 当我选择选择时,我得到一个未定义的警报。
这就是html的样子
<select id="quantity" name="quantity">
<option value="0001">250</option>
<option value="0002">500</option>
<option selected="selected" value="0003">1,000</option>
<option value="0004">2,500</option>
<option value="0005">5,000</option>
<option value="0006">10,000</option>
<option value="0007">20,000</option>
<option value="0008">30,000</option>
<option value="0009">40,000</option>
<option value="0010">50,000</option>
<option value="0011">100,000</option>
</select>
答案 0 :(得分:1)
您的代码提示未定义,因为您没有从ajaxCall()
函数返回任何内容,也不能在您使用异步服务器调用时返回。在alert()
运行很久之后,在从服务器加载数据后运行回调函数。尝试提醒里面的回调函数,如下所示:
function ajaxCall(hash)
{
$.get("ajax.php", { id: hash },
function(data)
{
alert(parseInt(data.price));
}, "json");
}
同样重要的是要注意,当您返回parseInt(data.price))
时,您不在ajaxCall
范围内,因此它根本不会返回任何警报。有一种方法可以在jQuery的服务器调用中关闭async
,但这是不可取的。相反,正如我上面所做的那样,考虑将数据处理逻辑放在回调函数中。
如果你已经死机拥有全功能的AJAX功能(不过,老实说,这就是jQuery的AJAX功能 ,并且没有理由要做到这一点),你可以做这样的事情:
$(document).ready(function() {
$("#quantity").change(function()
{
hash = $("#quantity").val(); //returns 0001 (ex)
qPrice_price = ajaxCall(hash, handleQuantityChange);
alert(qPrice_price);
});
});
function handleQuantityChange(data) {
alert(data);
}
function ajaxCall(hash, callback) {
$.get("ajax.php", { id: hash }, function(data) {
callback(parseInt(data.price));
}, "json");
}
答案 1 :(得分:0)
当HTTP响应到达时,回调(function(data){return parseInt(data.price);}
)称为 。
你必须在回调中做你想做的事情,你不能从它返回任何东西。
答案 2 :(得分:0)
请尝试使用此模式:
$("#quantity").change(function()
{
var hash = $("#quantity").val(); //returns 0001 (ex)
$.get("ajax.php", { id: hash },
function(data)
{
doSomething(parseInt(data.price));
}, "json");
});
如果坚持使用单独的ajax函数,该函数保证返回一个值,则必须包含一些 synchronized yuckery,例如:
function ajaxCall(hash)
{
var rv = null;
$.ajax({ url: "ajax.php",
data: { id: hash },
async: false,
dataType: 'json',
success: function(data)
{
rv = parseInt(data.price);
}
});
return rv;
}