2016-07-27 41 views
0

我試圖在elgg中創建一個AJAX動作。我跟了這埃爾格教程:阿賈克斯:執行行動,但我得到什麼,到目前爲止,除了失敗的錯誤:如何添加一個AJAX動作 - Elgg

Sorry, Ajax only! 

另一個錯誤是,頁面重新加載,而不是堅持異步數據。

我得到什麼錯誤?謝謝大家。

下面是我的代碼:

形式:的意見/默認/表格/ service_comments/add.php

<?php 
    $url_confirm = elgg_add_action_tokens_to_url("action/service_comments/add?guid={$guid}"); 
    $params_confirm = array(
     'href' => $url_confirm, 
     'text' => elgg_view_icon('upload'), 
     'is_action' => true, 
     'is_trusted' => true, 
     'class' => 'upload-media-update', 
     ); 

    $confirm = elgg_view('output/url', $params_confirm); 
?> 

<div class="update-options"> 
    <?= $confirm ?> 
</div> 

start.php

elgg_register_action("service_comments/add", __DIR__ . "/actions/service_comments/add.php"); 

動作文件:動作/ service_comments/add.php

<?php 

    elgg_ajax_gatekeeper(); 

    $arg1 = (int)get_input('arg1'); 
    $arg2 = (int)get_input('arg2'); 

    // will be rendered client-side 
    system_message('We did it!'); 

    echo json_encode([ 
     'sum' => $arg1 + $arg2, 
     'product' => $arg1 * $arg2, 
     ]); 

的Javascript:的意見/ JS/service_comments/add.js

var Ajax = require('elgg/Ajax'); 
var ajax = new Ajax(); 

ajax.action('service_comments/add', { 
    data: { 
    arg1: 1, 
    arg2: 2 
    }, 
}).done(function (output, statusText, jqXHR) { 
    if (jqXHR.AjaxData.status == -1) { 
    return; 
    } 
    alert(output.sum); 
    alert(output.product); 
}); 

回答

1

你已經寫了AJAX的程序,但不調用它。相反,你直接調用它。通過使其鏈接。

$params_confirm = array(
    'href' => '#', 
    'text' => elgg_view_icon('upload'), 
    'onclick' => "myajax_function()", 
    'class' => 'upload-media-update', 
    ); 

$confirm = elgg_view('output/url', $params_confirm); 

然後移動你的JS代碼在一個函數中。

function myajax_function(){ 
    var Ajax = require('elgg/Ajax'); 
    var ajax = new Ajax(); 

    ajax.action('service_comments/add', { 
      data: { 
      arg1: 1, 
      arg2: 2 
     }, 
    }).done(function (output, statusText, jqXHR) { 
     if (jqXHR.AjaxData.status == -1) { 
     return; 
    } 
    alert(output.sum); 
    alert(output.product); 
}); 
} 
+0

嗨@enRaiser。我有一個後續問題[這裏:我怎麼能將數據從HTML表單傳遞到處理AJAX調用的JavaScript文件](http://stackoverflow.com/questions/38651742/how-can-i-go-關於傳遞數據從一個HTML形式到一個JavaScript文件那句柄),我希望你可以再次請幫忙。謝謝。 –

+0

'onclick'=>「myajax_function(this)」,然後在myajax_function中使用這個。您可以將數據作爲數據參數存儲在主元素中。或者你可以使用DOM函數來訪問這個的子元素。 – enRaiser