2014-02-20 58 views
0

如何在$ .ajax()之外使用imageX时显示它的值?Ajax导致警报()

var imageX; 
$.ajax({ 
    type: 'GET', 
    url: 'php/my1.php', 
    dataType: 'json', 
    async: 'false', 
    success: function(response){ 
     imageX = response[0].studentName, 
     groupX = response[0].subjectId; 
    } 
}); 
alert(imageX); 
+0

使用'async:false'不是一个好的设计,因为该网站将停止重新直到电话回复*(他们是场合这可能是一个好主意,但我个人不知道他们)*。这意味着,如果服务器出现问题,并且通话时间更长,则服务器永远不会返回,您的用户将查看长时间无响应的网页。您可以使用触发器,方法或'.then .when'来确保在按需要完成调用时处理'imageX',但也不会冻结客户端。 – Nope

回答

6

变化

async: 'false',

async: false,

'假' 是由jQuery的(JS)转换为真正的字符串。

jquery Ajax文档说async接受布尔值。

异步(默认值:true)类型:Boolean通过 默认情况下,所有的请求都异步发送的(即它被设置为 真默认情况下)。如果您需要同步请求,请将此选项设置为 false。

https://api.jquery.com/jQuery.ajax/

异步:假 将导致jQuery.ajax()调用阻塞,直到它返回。 而不是这样的:

function your ajax_calling_function 
    call your ajax 
    callback with results 
+1

OP可能对解释* why *非常有帮助。 –

+0

当然让我编辑回答 – Ravi

+2

或者为什么这种方法是一个坏主意开始。 –

2

您需要设置async: falsetype Boolean)。

如果您将false关键字换成',Javascript认为这是一个string。和jQuery考虑async属性设置好的作为true

+0

THanks Paul .... :) – NathaliaZeed

0

实际设置async: false是个不错的办法,报价从这个answer

它通常是一个坏主意,使AJAX调用同步。不要做 IT。我是认真的。为了完整起见,我只在这里提及它。 你问为什么不好?

JavaScript在浏览器的UI线程中运行,任何长时间运行的进程将锁定UI,使其无响应。此外, 是JavaScript执行时间的上限,浏览器 将询问用户是否继续执行。所有的 这真是糟糕的用户体验。用户将无法告诉 一切工作是否正常。此外,连接速度较慢的用户对 的影响会更大。

一种方法是你的代码改写为:

function getImage() { 
    var imageX; 
    $.ajax({ 
     type: 'GET', 
     url: 'php/my1.php', 
     dataType: 'json', 
     success: function(response){ 
      imageX = response[0].studentName, 
      groupX = response[0].subjectId; 
     } 
    }); 
    return imageX; 
} 

,那么你可以将它传递给一个变量:

var result = getImage(); 

,并得到一个由AJAX调用,比如返回的数据这:

result.success(function (data) { 
    alert(data); 
});