将.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!"); });
});
我已经使用仅WRITE / UPDATE功能尝试了以下所有功能,但没有一个能够正常工作。
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 attach add update not working promise
并且没有发现任何与我的具体例子有关的内容。
有人可以给我一些指导吗?
我提前感谢你。
答案 0 :(得分:0)
嗯,没有人回应,我在最后一天通过黑客攻击了解了一下。以下是我认识到的一些事情:
如果使用ajax创建一般的可调用函数,它与“内联”ajax的行为不同 - 你没有得到与ajax代码位于ajax底部时相同的回调操作。脚本标记之间的HTML页面。
如果从服务器返回内容,则ajax函数的行为与脚本标记之间的行为类似。
如果您不从服务器返回数据,则ajax函数的行为与内联时的行为不同。
所以我所做的就是所有只有“写/更新”的php文件(没有返回数据),我在每个php文件的底部添加一些代码,返回少量的json“垃圾” 。使用这个“垃圾”,ajax函数就像页面底部脚本标记之间的常规ajax调用一样。
这是一个kludge,但它的工作原理。这是读取/更新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
我希望我理解细节,但这是一个有效的经验解决方案。
专家的评论会很好。
感谢您的期待!