jquery ajax调用成功,如何在包装器javascript函数中更改全局变量?

function ajax_test(str1){ var url = "None" jq.ajax({ type:'post', cache: false, url: 'http://....' + str1, success: function(data, status, xhr){ url=data; }, error: function (xhr, status, e) { }, async: true, dataType: 'json' }); return url } 

如何将全局变量url设置为返回的成功ajax数据?

在Javascript中,函数不可能return异步结果。 该函数通常在发出AJAX请求之前返回。

您始终可以强制您的请求与async: false ,但这通常不是一个好主意,因为它会导致浏览器在等待结果时锁定。

解决这个问题的标准方法是使用回调函数。

 function ajax_test(str1, callback){ jq.ajax({ //... your options success: function(data, status, xhr){ callback(data); } }); } 

然后你可以像这样调用它:

 ajax_test("str", function(url) { //do something with url }); 

这是我从php检索数据的示例代码,然后将值传递给ajax success函数中的javascript全局变量。 这个对我有用!

 var retVal = null; function ajaxCallBack(retString){ retVal = retString; } function readString(filename){ $.ajax({ type: "POST", url: "readString.php", data: { 'fn': filename }, success: function(response){ ajaxCallBack(response); } }); } 

PHP代码(readString.php):

  

但是,由于$ .ajax()异步发送请求,这意味着它可能在成功回调运行之前返回,因此您不应该依赖它依次运行并自行返回值。 因此,这里我们将php响应值分配给回调函数中的全局值。