2016-07-27 7 views
0

Я пытаюсь создать действие AJAX в 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

Hi @enRaiser. У меня есть следующий вопрос [ЗДЕСЬ: Как я могу перейти к передаче данных из HTML-формы в файл JavaScript, который обрабатывает вызовы AJAX] (http://stackoverflow.com/questions/38651742/how-can-i-go- about-pass-data-from-a-html-form-to-a-javascript-file-that-handl), и я надеялся, что вы сможете еще раз помочь. Спасибо. –

+0

'onclick' => "myajax_function (this)", затем внутри myajax_function используйте это. Вы можете хранить данные как параметры данных в главном элементе. или вы можете использовать функцию DOM для доступа к дочернему элементу этого. – enRaiser