.done 附件不适用于 ajax 更新文件,适用于从文件读取



现在对我来说,将 .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 附加添加更新不起作用的承诺

并且没有发现任何涉及我的具体示例的内容。

有人可以给我一些指导吗?

我提前谢谢你。

好吧,没有人回应,我通过最后一天的黑客攻击学到了一些东西。以下是我认为我学到的一些东西:

  1. 如果使用 ajax 创建通用可调用函数,它的行为与"内联"ajax 不同 - 当 ajax 代码位于脚本标记之间的 HTML 页面底部时,您不会获得与相同的回调操作。

  2. 如果从服务器返回某些内容,则 ajax 函数的作用类似于它在脚本标记之间时的作用。

  3. 如果不从服务器返回数据,则 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

我希望我了解细节,但这是一个有效的经验解决方案。

专家的评论会很好。

感谢您的观看!

最新更新