我在将数据返回到想要返回的函数时遇到问题。代码如下:
function ioServer(request_data, callback) { $.ajax({ cache: false, data: "request=" + request_data, dataType: "json", error: function(XMLHttpRequest, textStatus, errorThrown){}, success: function(response_data, textStatus){ callback(response_data); }, timeout: 5000, type: "POST", url: "/portal/index.php/async" }); } function processRequest(command, item, properties) { var request = {}; request.command = command; request.item = item; request.properties = properties; var toServer = JSON.stringify(request); var id = ioServer(toServer, processResponse); return id; } function processResponse(fromServer) { if (fromServer.response == 1) { return fromServer.id; } }
我通过在另一个函数内调用processRequest函数来调用这段代码。发送请求并获取响应就可以了。但是,我需要将响应中的值“ id”返回给processRequest函数,因此它又可以将该值返回给其调用方。据我所知,processResponse中的返回值返回到$ .ajax,但是我需要它进一步返回到processRequest。
顺便说一句,processResponse中的if语句引用服务器端PHP脚本设置的值,以告知是否允许该请求(例如,如果用户未登录,fromServer.response将为0)。它与$ .ajax对象的成功/错误例程无关。
非常感谢您的帮助。
@Jani:感谢您的答复,但您能否再说明一点?需要“ id”的函数具有以下代码:
$(#tabs).tabs('add', '#tab-' + id, 'New tab');
您是说我应该尝试在processResponse函数中执行这段代码吗?因为那不是我打算做的。这些功能旨在成为维护状态服务器端的通用解决方案。这就是为什么我避免将这段代码放在那里。
由于Tony没有提供任何评论,所以让我添加有关他的建议的详细信息。
如您所知,由于$ .ajax方法是异步的,因此在进行$ .ajax调用后,processRequest函数将立即完成。那么,您将如何通知processRequest的调用者该任务已完成?
很简单,您要求processRequest的调用者提供“回调函数”。每当processRequest收到ajax输出时,它将调用此函数。在tony的代码中,这是processRequest函数的最后一个参数。
所以您的调用代码现在看起来像
function tabMethod() { processRequest('command', 'item', 'properties', function (id) { if (id == null) { alert('There is a problem!'); return; } $('#tabs').tabs('add', '#tab-' + id, 'New tab'); }); };