我确定有一个简单的解决方案,但我有问题,
我有一个外部的ajax.js文件,它有一个像这样的AJAX调用:
$(function() {
$.ajax({
url: url,
success: function( data, status )
在AJAX调用之上我有两个全局变量叫做ticker和url,如下所示:
var ticker = 'AAPL'
var url = 'http://blahblahblah' + ticker
在我的HTML文件中,我有一个输入框,用户输入一个自动收报机代码(例如GOOG)并点击一个按钮来更新自动收报机变量,以便使用新的URL再次完成AJAX调用。
<form id="form">
<h3>Enter the ticker symbol of the company you wish to view:</h3>
<input type="text" id="userInput">
<button onclick="myFunction()">Try it</button>
</form>
<script type="text/javascript" src="ajax.js">
<script>
function myFunction()
{
//old value
alert(ticker);
ticker = document.getElementById('userInput').value;
//new value
alert(ticker);
}
</script>
此代码更改了ticker变量,但仍在使用旧的ticker url执行AJAX调用。我认为它没有正确分配?我是AJAX的新手,但我找不到任何解释这个问题的在线教程。
谢谢
答案 0 :(得分:1)
字符串在Javascript中是不可变的,这意味着即使您更改自动收报机,网址也将保持不变。这样做:
$(function() {
$.ajax({
url: "http:/blah" + ticker,
success: function(data, status) {}
});
});
编辑:现在我考虑一下,它与字符串是不可变的无关。执行url = "http:/" + ticker
不会创建值为ticker
的闭包,它只是创建一个新的字符串值并将其存储在url
中。创建新值后,它不会以任何方式链接到ticker
。
答案 1 :(得分:0)
据我所知,你发布的代码只能在加载页面时调用你的ajax例程,这解释了为什么结果中只显示默认的url / ticker。
你需要在函数中包装ajax例程,并在用户输入符号后调用它:
在你的ajax.js文件中:
function getSymbolInfo(ticker) { // consider passing ticker to this function instead of using a global var
$.ajax({
url: url + ticker,
success: function( data, status ) {
// show results
}
});
}
来自MyFunction:
function myFunction()
{
var ticker = document.getElementById('userInput').value;
getSymbolInfo(ticker);
}