【问题标题】:Use local javascript variable in ajax url在 ajax url 中使用本地 javascript 变量
【发布时间】:2016-11-09 14:39:52
【问题描述】:

我在点击事件调用的函数中有一个局部变量。变量因单击的按钮而异。

然后我试图将该变量传递给另一个包含 AJAX 的函数。

我似乎无法使用 ajax 函数中的第一个局部变量。

我尝试使用“window.myVariable”使其成为全局变量,但它不起作用。正如您在代码中看到的那样,我还添加了对下一个函数的调用,其中我的变量作为参数但没有骰子。我在控制台中遇到的错误是“未定义变量‘用户’。”

我根本无法访问原始函数之外的局部变量。谁能明白为什么它拒绝成为全局变量?

function getStateOfChat(){
	if(!instanse){
		 instanse = true;
		 $.ajax({
			   type: "POST",
                           url: user + "/process.php",
			   data: {  
			   			'function': 'getState',
			   			'nickname': nickname,
						'file': file
						},
			   dataType: "json",
			
			   success: function(data){
				   state = data.state;
				   instanse = false;
			   },
			});
	}	 
}
var user1 = "john";
var user2 = "andrew";

// ============== USER 1 ==============
    

        <button type="button" class="btn btn-info btn-lg chatBtnMain" data-toggle="modal" data-target="#myModal2" id="chatBtn1">
                Chat to 
                <span class='nickname'>
                    John
                </span>
        </button>
<script type="text/javascript">
   document.getElementById('chatBtn1').addEventListener('click', runScript1);
    function runScript1() {
        var user = user1;
        getStateOfChat(user);
    }
</script>
     
    
    
    // ============== USER 2 ==============
        
        <button type="button" class="btn btn-info btn-lg chatBtnMain" data-toggle="modal" data-target="#myModal3" id="chatBtn2">
                Chat to 
                <span class='nickname'>
                    Andrew
                </span>
        </button>
<script type="text/javascript">
   document.getElementById('chatBtn2').addEventListener('click', runScript2);
   
    function runScript2() {
        var user = user2;
        getStateOfChat(user);
    }
</script>

【问题讨论】:

  • 只需添加用户参数function getStateOfChat(user) { ... }
  • ^ 如果传递参数也会导致undefined 错误,这意味着您分配给user 的值即user1 本身就是undefined
  • ^ 添加到这一点你已经在 html 中分配了 var user1 = "john"; 在 javascript 代码块之外
  • @anu 是的,这只是为了说明变量是什么。它在我页面上的脚本标签内。
  • @MohitBhardwaj 在使用警报进行测试时已定义 > alert(user1);它显示正确的值。我尝试在调用函数时将用户作为参数传递,但它仍然给我未定义的错误

标签: javascript ajax url global-variables local-variables


【解决方案1】:

您要做的是将调用中的参数传递给$.ajax

function getStateOfChat(user){
    if(!instanse){
         instanse = true;
         $.ajax({
               type: "POST",
                           url: user + "/process.php",
               data: {  
                        'function': 'getState',
                        'nickname': nickname,
                        'file': file
               },
               dataType: "json",
               user: user,
            
               success: function(data){
                   user = this.user
                   state = data.state;
                   instanse = false;
               },
            });
    }    
}

【讨论】:

    【解决方案2】:

    然后我试图将该变量传递给另一个包含 AJAX 的函数。

    你成功通过了:

    getStateOfChat(user);
    

    问题是您从未在传递给它的函数中读取该变量。

    url: user + "/process.php",
    

    您正在尝试读取一个名为 user 的变量,但您在函数内部没有一个名为该变量的变量。

    在参数参数中指定:

    function getStateOfChat(user){
    

    我尝试使用“window.myVariable”使其全局化,但它不起作用

    避免使用全局变量。它们更难管理局部变量。

    我根本无法访问原始函数之外的局部变量。谁能明白为什么它拒绝成为全局变量?

    var user = user1;
    

    这就是the var keyword的目的。

    【讨论】:

    • 感谢 Quentin,我已经尝试了所有这些,但它仍然告诉我 user 的值是“未定义”。它运行 url 查询,但在控制台中出现错误提示“localhost:8888/confirm/undefined/process.php Failed to load resource:”
    • @E.Nathan — 当我制作 that change 时,它是 works fine
    • 不知何故不适合我。会不会是我的订单错了。我首先包括 JQuery。第二次使用事件侦听器运行所有 HTML 和脚本标签,最后调用 ajax
    • 这是唯一可以做到的顺序。
    • 我就是这么想的。我看不出我的代码和你的代码有什么区别,它仍然不起作用。
    猜你喜欢
    • 2012-08-20
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多