0

我确定有一个简单的解决方案,但我有问题,

我有一个外部 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 变量,但AJAX 调用仍在使用旧的ticker url 执行。我认为它没有被正确分配?我对 AJAX 很陌生,但我在网上找不到任何解释这个问题的教程。

谢谢

4

2 回答 2

1

字符串在 Javascript 中是不可变的,这意味着 url 将保持不变,即使您更改代码。改为这样做:

$(function() {
    $.ajax({
        url: "http:/blah" + ticker,
        success: function(data, status) {}
    });
});

编辑:现在我考虑一下,它与字符串不可变无关。Doingurl = "http:/" + ticker不会创建一个值为 的闭包ticker,它只是创建一个新的字符串值并将其存储在url. 创建新值后,它不会以ticker任何方式链接到。

于 2013-04-05T16:15:29.060 回答
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);

}
于 2013-04-05T16:22:10.407 回答