.done附件不使用ajax更新到文件,使用从文件读取

时间:2013-10-18 12:34:05

标签: ajax sql-update promise

将.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

并且没有发现任何与我的具体例子有关的内容。

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

我提前感谢你。

1 个答案:

答案 0 :(得分:0)

嗯,没有人回应,我在最后一天通过黑客攻击了解了一下。以下是我认识到的一些事情:

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

  2. 如果从服务器返回内容,则ajax函数的行为与脚本标记之间的行为类似。

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

  4. 所以我所做的就是所有只有“写/更新”的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
    

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

    专家的评论会很好。

    感谢您的期待!