Kai*_*Kai 33 jquery xmlhttprequest
我正在尝试调用包含jQuery代码的函数.我希望这个函数返回jQuery语句的结果.它没有用,我正在试图找出原因.
function showGetResult (name) {
var scriptURL = "somefile.php?name=" + name;
return $.get(scriptURL, {}, function(data) { return data; });
}
alert (showGetResult("John"));
Run Code Online (Sandbox Code Playgroud)
警报显示" [object XMLHttpRequest]." 但是,如果我在函数之外单独运行jQuery语句,它可以正常工作 - >$.get(scriptURL, {}, function(data) { alert(data); })
我希望能够通过将其放在返回$.get数据的函数内来重用此代码.我在这里犯了什么根本错误?
tva*_*son 94
你有几个不同的错误.首先,$ .get不返回回调函数的返回值.它返回XHR对象.其次,get函数不是同步的,它是异步的,因此showGetResult可能会在完成之前返回.第三,你不能从回调内部向外部范围返回一些东西.但是,您可以绑定外部作用域中的变量并将其设置在回调中.
要获得所需的功能,您需要使用$ .ajax并将async选项设置为false.然后,您可以在外部作用域中定义变量并在ajax回调中分配它,从函数返回此变量.
function showGetResult( name )
{
var result = null;
var scriptUrl = "somefile.php?name=" + name;
$.ajax({
url: scriptUrl,
type: 'get',
dataType: 'html',
async: false,
success: function(data) {
result = data;
}
});
return result;
}
Run Code Online (Sandbox Code Playgroud)
但是,您可能会更好地服务,找出如何在回调函数本身中执行您想要的操作,而不是从异步调用更改为同步调用.
你所犯的根本错误是AJAX调用是异步进行的,所以当你返回时,结果还没有准备好.要使这项工作,您可以像这样修改您的代码:
$(function() {
showGetResult('John');
});
function showGetResult (name) {
$.get('somefile.php', {
// Pass the name parameter in the data hash so that it gets properly
// url encoded instead of concatenating it to the url.
name: name
}, function(data) {
alert(data);
});
}
Run Code Online (Sandbox Code Playgroud)
看起来你想要同步请求: 我怎样才能让jQuery执行同步而不是异步的Ajax请求?
或者,您可能希望将回调传递给您的函数:
function showGetResult (name, callback) {
var scriptURL = "somefile.php?name=" + name;
return $.get(scriptURL, {}, callback);
}
showGetResult("John", function(data){ alert(data); });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77987 次 |
| 最近记录: |