javascript全局变量未在ajax回调中更新

时间:2015-06-10 16:45:13

标签: javascript jquery ajax

警告时,它始终会提醒Imports System.IO Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim di As New IO.DirectoryInfo("c:\la") Dim diar1 As IO.FileInfo() = di.GetFiles() Dim dra As IO.FileInfo For Each dra In diar1 'Dim sr As StreamReader = New StreamReader(dra.FullName) If System.IO.Path.GetExtension(dra.Name).ToLower() = ".xls" Then TreeView1.Nodes.Add("Offerts") TreeView1.Nodes(0).Nodes.Add(dra.Name) End If Next End Sub End Class jojo有文字test2.php

div更新为Loco,但全局变量没有变化。我试过Loco,但它没有用。

如何在变量中获取返回值?请指导......

window.temp = data

4 个答案:

答案 0 :(得分:4)

这是一个异步函数。 (这就是AJAX中的 A 所代表的。)您正在立即警告temp的值,因此它在异步调用完成之前发生。如果你添加

alert(temp);

success处理程序的末尾,您将看到值已更新。

答案 1 :(得分:1)

1)的变化  var temp = 'jojo'  至 'temp ='jojo'

因为这不仅限于执行上下文而且不限于文件(有优点和缺点 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var

2)问题是在回调之前调用了警报。 将警报移动到该功能中。由于ajax是异步调用的,意味着调用成功和错误函数,只有当ajax从服务器获得响应时,才会立即调用现在的警报。

http://javascript.about.com/od/ajax/a/ajaxasyn.htm

 $.ajax({
            url: 'test2.php', //Loco
            success: function(data)
            {
                    temp = data;
                    $('div').html(data);
                    alert(temp).
            },
            error: function (err)
             {
                 alert('error');

             }
        });

3)或者你可以将ajax的异步设置为false: What does "async: false" do in jQuery.ajax()? 哪个会导致Ajax调用将在下一行代码之前完成,但强烈建议不要这样做。

答案 2 :(得分:1)

AJAX - { "query": { "bool": { "must": [ { "term": {"app.raw": "ME"} } ,{ "term": {"cat.raw": "IV"} } ,{ "term": {"sub.raw": "Act"} } ] } } , "aggs": { "distinct_users": { "cardinality": { "field": "login", "precision_threshold": 1000 } } } } 意味着你不是在等待响应来,Javascript被解释为语言在另一行之后执行。所以这里首先执行asynchronous,然后执行成功回调,因为需要一些时间来获得响应。

答案 3 :(得分:0)

只需在您的 ajax 选项中添加 async: false

相关问题