我试图从剪切和粘贴代码保持所以我做了一个包装的数据保存到Web服务器:同步AJAX调用的问题,它为什么会对我异步?
function saveData(newData) {
//clear our error message out.
$("#Status").html("");
var anID;
//save the data to the server
$.ajax({
type: "POST",
url: "/John/SaveSomeData",
data: JSON.stringify(newData),
async: false,
contentType: 'application/json; charset=utf-8',
datatype: "json",
traditional: false,
success: function (sReturn) {
anID = parseInt(sReturn);
if (isNaN(anID)) {
$("#Status").html("Error: " + sReturn);
return -1;
}
}
}); //end AJAX call
return anID;
} //end save data
基本上,函数返回以上的正整数,如果它的工作和-1,如果它得到了来自服务器的错误。如果数据已成功添加,则Web服务器返回一个整数值,如果发生错误,则返回一些文本。
发送和返回是以字节为单位......有绝对最差的情况是200个字节(是的,字节,而不是千,万,或千兆...只是个字节),所以我跟不关心数据发送大量数据的可能性以及处理它的时间。
我使用上面的代码如下(一个在添加按钮另一个在保存按钮):
$("#addButton").click(function (event) {
//validate data locally
//cut some unimportant code
var newData = /*newdata junk cut*/
var myID = saveData(newData);
if (myID != -1) {
//cut code for adding result to a list
//snip the rest of the code
我遇到的明显的问题是jquery的触发的AJAX调用,并继续在不等待阿贾克斯呼吁完成。基本上,服务器可能会返回“未能添加”,并且“添加按钮事件”会继续像成功一样进行处理。
的数据被正确地发送到web服务器是好的,处理,和响应从网络服务器正确。这纯粹是同步/异步问题,而不是服务器的数据。
我的理解是“异步:假”行应强制jQuery来等待Ajax调用在做任何事情之前完成。
上添加对保存会发生什么编码是不同的。因此,我不想在与阿贾克斯的代码。
我需要ajax的部分转化为更多的东西一样:
var ajaxReturn = $.ajax({
type: "POST",
url: remote_url,
async: false, }).responseText;
ajaxReturn.done(function(msg) {
$("#log").html(msg);
});
ajaxReturn.fail(function(jqXHR, textStatus) {
alert("Request failed: " + textStatus);
});
+0
'async:false' = 99%你有可能做错了。 –
2012-04-09 20:19:55
+0
@詹姆斯......我想说,如果它不工作,我可能不是在做正确的...有什么要补充的可能解决这个问题? –
2012-04-11 20:53:52