Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.done附件不适用于文件的ajax更新,适用于从文件读取_Ajax_Sql Update_Promise - Fatal编程技术网

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

.done附件不适用于文件的ajax更新,适用于从文件读取,ajax,sql-update,promise,Ajax,Sql Update,Promise,现在,将.done.fail和.always附加到ajax调用对我来说是可行的——当脚本位于html页面的底部时,这“很容易” 现在我想创建一个通用的ajax函数,只需在头文件中包含一个js文件即可使用。我成功地使用了从服务器读取数据的ajax函数(.done总是有效的)。我在向服务器写入或更新数据时遇到问题(没有返回数据)。具体情况如下- 在页面底部的脚本标记中,标准ajax添加/更新调用始终有效 $.ajax({ type: 'POST', url: 'su

现在,将.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上找到了这个概念)

我已经用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'); });
因此,很明显,在处理承诺的方式上,在“获取我的数据”和“这是数据,请存储它”之间存在差异

我甚至还放了一个
回音“Done”在更新php文件的底部只是为了返回一些东西,仍然没有运气

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

ajax.done附加添加更新无效承诺

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

有人能给我一些指导吗


我提前向你表示感谢。

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

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

  • 如果您从服务器返回一些内容,ajax函数的作用与在脚本标记之间时类似

  • 如果不从服务器返回数据,ajax函数的作用与内联时不同

  • 因此,我所做的是在所有仅“写入/更新”的php文件(没有返回数据)上,在每个返回少量json“垃圾”的php文件的底部添加一点代码。有了这个“垃圾”,ajax函数就像是页面底部脚本标记之间的常规ajax调用

    这是一个难题,但它是有效的。下面是读取/更新php文件底部的代码,通常不会返回任何内容。它现在返回一个关于“John”的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
    
    我希望我能理解细节,但这是一个经验性的解决方案

    专家们的评论会很好


    谢谢你的关注

    你在这里所做的看起来是正确的。这正是我编写广义效用函数的方法。它工作的原因是因为
    generalWriteAjax()
    现在返回由
    $.ajax()返回的对象,该对象与promise兼容。因此,您可以像最初链接
    $.ajax().done()
    一样链接
    generalWriteAjax().done()
    。很好,非常感谢。但我想知道“回调”是怎么回事。当函数与其余代码位于同一页时,将发生回调。但是,当我将函数移动到js文件时,只有当我在文件底部放置回显“诸如此类”时,才会收到服务器的回调。Tim,如果我理解正确,这与javascript“成员”的范围有关,而不是与延迟/承诺有关。函数必须在作用域内,才能调用。Javascript的作用域在许多在线教程中都有很好的讨论,这些教程很容易通过您喜爱的搜索引擎找到。谢谢!我现在就开始找!在Mozilla网站上找到了一篇不错的评论-学习…学习…学习…再次感谢。
    function generalWriteAjax( filetocall, datatosend ) {
      return $.ajax({
                       type: 'POST',
                        url: filetocall,
                       data: datatosend,
                   dataType: 'json'
                     });
                                                         }
    
    $("#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