我有一个提供标准扩展点的JavaScript小部件。 其中之一是beforecreate
函数。 它应该返回false
以防止创建项目。
beforecreate: function (node, targetNode, type, to) {
jQuery.get('http://example.com/catalog/create/' + targetNode.id + '?name=' + encode(to.inp[0].value),
function (result) {
if (result.isOk == false)
alert(result.message);
});
}
但是我想防止我的小部件创建项目,因此我应该在母函数中而不是在回调中返回false
。 有没有一种方法可以使用jQuery或任何其他浏览器内API执行同步AJAX请求?
#1楼
function getURL(url){
return $.ajax({
type: "GET",
url: url,
cache: false,
async: false
}).responseText;
}
//example use
var msg=getURL("message.php");
alert(msg);
#2楼
所有这些答案都错过了要点,即使用async:false进行Ajax调用将导致浏览器挂起,直到Ajax请求完成。 使用流控制库将解决此问题,而无需挂起浏览器。 这是Frame.js的示例:
beforecreate: function(node,targetNode,type,to) {
Frame(function(next)){
jQuery.get('http://example.com/catalog/create/', next);
});
Frame(function(next, response)){
alert(response);
next();
});
Frame.init();
}
#3楼
从jQuery文档中 :您将异步选项指定为false,以获取同步Ajax请求。 然后,您的回调函数可以在您的母函数继续执行之前设置一些数据。
如果按照建议进行更改,则代码如下所示:
beforecreate: function (node, targetNode, type, to) {
jQuery.ajax({
url: 'http://example.com/catalog/create/' + targetNode.id + '?name=' + encode(to.inp[0].value),
success: function (result) {
if (result.isOk == false) alert(result.message);
},
async: false
});
}
#4楼
这是示例:
$.ajax({
url: "test.html",
async: false
}).done(