Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.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
Javascript 如何在同一次单击中执行JS函数和Django后端方法调用?_Javascript_Django - Fatal编程技术网

Javascript 如何在同一次单击中执行JS函数和Django后端方法调用?

Javascript 如何在同一次单击中执行JS函数和Django后端方法调用?,javascript,django,Javascript,Django,当点击按钮或链接时,我想执行两种方法 一个是Javascript,它将向第三方发送信息,第二个是后端Django方法,它将更新数据库中的字段。这样我就可以控制JavaScript函数只执行一次 理想情况下,Javascript应该首先执行,并且只有在执行之后才会触发后端方法 我试图将它合并到同一个链接中,但这是错误的,因为只有javascript执行 <a href="{% url 'add_to_production_board' pk=soproduct.id uri=request.

当点击按钮或链接时,我想执行两种方法 一个是Javascript,它将向第三方发送信息,第二个是后端Django方法,它将更新数据库中的字段。这样我就可以控制JavaScript函数只执行一次

理想情况下,Javascript应该首先执行,并且只有在执行之后才会触发后端方法

我试图将它合并到同一个链接中,但这是错误的,因为只有javascript执行

<a href="{% url 'add_to_production_board' pk=soproduct.id uri=request.build_absolute_uri %}" onclick="AddCardToTrello()">Add to Trello</a>
我的选择是什么?我可以从JavaScript调用我的后端方法吗

更新:

尽管所有这些答案都很好,但在我的例子中,有一件棘手的事情是如何生成支持呼叫的 {%url'add_to_production_board'pk=soproduct.id uri=request.build_absolute_uri%}

我使用Django作为后端,从JavaScript中调用后端方法与直接单击之间可能存在一些差异。发生的情况是,当从JS域名中调用它时,会被切断

window.location.href= /生产/生产/订单/董事会/5/127.0.0.1:8000/生产/SOPProduct/details/5/

当真正的联系是


因此,当我从Javascript调用该方法时,它切断了我域名的第一部分,这可能会破坏JS脚本。因此,没有一个答案是有效的。我对Ajax不太清楚,因为到目前为止它还不能正常工作。

您可以简单地创建一个包含您希望执行的两个函数的函数

function toBeExecuted() {
   f1();
   f2();
}

要扩展@TrampolineTales answer,由于您的两个操作之一是导航到不同的页面,您可以

function addCardThenGo(url) {
    AddCardToTrello();
    window.location.href = url;
}
然后


结果你有两个问题。一个是关于调用两个函数,另一个是关于如何在后端调用函数

调用两个函数 您可以使用其他人指出的一个函数,调用其他两个函数。如果您不想这样做,可以只注册两个事件处理程序

注册两个处理程序 $function{ $.demo.clickfunction{ console.loghandler1; }; $.demo.clickfunction{ 控制台。loghandler2; }; };
再加上Trello到目前为止,许多答案似乎没有抓住要点。除非我完全误解了你的问题,否则他们只是部分正确。是的,您可以从前端调用后端函数,但是您需要在前端使用Ajax,并且您的后端函数需要配置为接受HTTP POST请求

这个答案假设您正在使用jQuery。此外,不清楚后端功能的名称是什么,也不清楚服务器是如何配置的。我在这里做了很多假设。你应该提供更多的信息

function callBackEnd(url) {
  $.post(url, function() {
    console.log('HTTP POST sent');
  });
}

您可以在AddCardToRelloadd中调用后端函数以调用两个函数。这不可能吗?可能是等待的重复,您不想调用javascript方法吗?你想要一个链接跟随一个链接并调用函数吗?你应该修复你的问题标题。目前所有的答案似乎都没有抓住重点。只需为这两个函数添加一个包装器函数,并调用该包装器即可。对不起,这个愚蠢的问题,我的第二个方法不是JavaScript函数,这有什么关系吗?@BorisTheAnimal是的,这很重要。查看如何从客户端调用服务器端函数。提示:如果您不想刷新当前页面,请使用Ajax。当我使用此代码段时,url创建不正确,这可能与我的Django框架如何通过单击和在函数窗口中调用来构建url有关。location.href=/production/production/order/board/5/;我不知道django的具体情况,但这不就是add_to_production_board方法的一个问题吗?它应该返回一个有效的url?在你的例子中,我猜它返回的是一个没有协议的绝对url,这被解释为relativeNot,因为当我没有在JS中返回它时,它返回的是正确的url。奇怪的工作解决方案回答得不错,但它没有解决他问题的另一半。我的后端函数是Django framework方法,这是我正在构建的链接,我将其命名为它,它显示在问题主体的链接中,是的,jQuery包含在我的模板中
AddCardToTrello(event) {  
  event.preventDefault(); //to stop the page from redirecting
  doStuff(); // do the stuff you to do first
  var href=$(this).attr('href');  
  window.location = href; // redirect here 
}
function callBackEnd(url) {
  $.post(url, function() {
    console.log('HTTP POST sent');
  });
}
function AddCardToTrello() {
  // ...do whatever this does
  // call the backend
  callBackEnd('http://www.yourserver.com/backend/function');
}