现在对我来说,将 .done .fail 和 .always 附加到 ajax 调用是可行的 - 当脚本位于 html 页面底部时,这"很容易"。
现在我想创建通用的 ajax 函数,只需在标头中包含 js 文件即可使用它。我已经成功地使用了从服务器读取数据的 ajax 函数(.done 总是有效)。当我只是将数据写入或更新到服务器时,我遇到了问题(不返回数据)。以下是具体细节-
始终有效的标准 ajax 添加/更新调用 - 在页面底部的脚本标记中。
$.ajax({
type: 'POST',
url: 'supdateajaxfunctiontestbackend.php',
data: {localid: localid,
firstname: firstname,
lastname: lastname}
}).done(function(){ alert('Done with Add/Update!'); });
如果我在页面底部创建一个函数,或者将该函数添加到 js 文件中,则此添加/更新始终有效。
function generalWriteAjax(filetocall, datatosend) {
$.ajax({
type: 'POST',
url: filetocall,
data: datatosend
}).done(function(){ alert('Done with Add/Update!'); });
}
我想将 .done 与函数分离,并在附加到单独的函数/对象时调用 .done。当有从服务器返回的数据时,以下代码工作正常。(一个单独的 generalReadAjax 函数,用于请求服务器数据)。done附加到从服务器返回的对象(这个概念我在Stackoverflow上找到)。
backenddata = generalReadAjax('readtesttablebackend.php');
displayData(backenddata);
backenddata.done(function(){ alert("Done with read!"); });
});
我已经使用仅写入/更新功能尝试了以下所有方法,但没有一个有效。
generalWriteAjax(filetocall4update, datatosend4update).done(function(){ alert('Done function'); });
generalWriteAjax(filetocall4update, datatosend4update).when(function(){ alert('Done function'); });
generalWriteAjax(filetocall4update, datatosend4update).then(function(){ alert('Done function'); });
generalWriteAjax(filetocall4update, datatosend4update);
createdonealert = generalWriteAjax(filetocall4update, datatosend4update);
createdonealert.done(function(){ alert('Done function'); });
createdonealert.when(function(){ alert('Done function'); });
createdonealert.then(function(){ alert('Done function'); });
因此,很明显,"去给我数据"和"这是数据,请存储它"之间的处理方式是不同的。
我什至在更新 php 文件的底部放了一个echo "Done";
只是为了返回一些东西,但仍然没有运气。
我已经搜索了这个网站和谷歌的组合:
ajax .done 附加添加更新不起作用的承诺
并且没有发现任何涉及我的具体示例的内容。
有人可以给我一些指导吗?
我提前谢谢你。
好吧,没有人回应,我通过最后一天的黑客攻击学到了一些东西。以下是我认为我学到的一些东西:
-
如果使用 ajax 创建通用可调用函数,它的行为与"内联"ajax 不同 - 当 ajax 代码位于脚本标记之间的 HTML 页面底部时,您不会获得与相同的回调操作。
-
如果从服务器返回某些内容,则 ajax 函数的作用类似于它在脚本标记之间时的作用。
-
如果不从服务器返回数据,则 ajax 函数的行为与内联时的行为不同。
所以我所做的是在所有仅"写入/更新"(不返回数据)的 php 文件上,我在每个 php 文件的底部添加了一些代码,返回少量的 json"垃圾"。有了这个"垃圾",ajax 函数就像页面底部脚本标记之间的常规 ajax 调用。
这是一个笨拙,但它有效。这是读取/更新php文件底部的代码,通常不会返回任何内容。它现在返回一个关于"John"的json数组:
$json = array('firstname' => 'John');
echo json_encode($json);
这是附加的js文件中的函数:
function generalWriteAjax( filetocall, datatosend ) {
return $.ajax({
type: 'POST',
url: filetocall,
data: datatosend,
dataType: 'json'
});
}
下面是页面上调用 .js 函数的代码:
$("#clicktoupdate").click(function(e) {
var localid = $('#idnumber').val();
var firstname = $('#updatefirstname').val();
var lastname = $('#updatelastname').val();
var filetocall4update = 'supdateajaxfunctiontestbackend.php';
var datatosend4update = {localid: localid, firstname: firstname, lastname: lastname};
generalWriteAjax(filetocall4update, datatosend4update).done(function(){ alert('Done inline'); });
});//end of update click
我希望我了解细节,但这是一个有效的经验解决方案。
专家的评论会很好。
感谢您的观看!