0

将 .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 函数)。完成后附加到从服务器返回的对象上(我在 Stackoverflow 上找到了这个概念)。

  backenddata = generalReadAjax('readtesttablebackend.php');
  displayData(backenddata);
  backenddata.done(function(){ alert("Done with read!"); });
                                   });

我已经使用 WRITE/UPDATE only 功能尝试了以下所有方法,但它们都不起作用。

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'); });

所以很明显,在“去获取我的数据”和“这是数据,请存储它”之间处理承诺的方式是不同的。

我什echo "Done";至在更新 php 文件的底部放了一个只是为了返回一些东西,但仍然没有运气。

我用以下组合搜索了这个网站和谷歌:

ajax .done attach add update not working promise

并没有发现任何与我的具体例子有关的东西。

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

我提前谢谢你。

4

1 回答 1

0

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

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

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

  3. 如果您不从服务器返回数据,则 ajax 函数的行为与内联时不同。

所以我所做的只是对所有“写入/更新”的 php 文件(不返回数据),我在每个返回少量 json“垃圾”的 php 文件的底部添加了一些代码。有了这个“垃圾”,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

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

专家的评论会很好。

感谢您的关注!

于 2013-10-19T13:16:48.283 回答