Mở một hộp dày với máng nội dung AJAX


11

Tôi đã thêm một nút tùy chỉnh vào trình soạn thảo TinyMCE và tôi muốn mở Hộp dày của WP khi tôi nhấp vào nó.

Làm thế nào tôi có thể làm cho nó để tb_show()chức năng tải nội dung tôi muốn với ajax?

// the ajax
add_action('wp_ajax_getTheContent', 'getTheContent');
function getTheContent(){
  echo 'weqwtegeqgr'; // <- this should be displayed in the TB
  die();
}

Đây là một số mã trình chỉnh sửa tôi đang sử dụng:

init : function(ed, url) {
  ed.addButton('do_stuff', {
    title : 'Do Stuff',
    image : url + '/icon.gif',
    onclick : function() {
        OpenMyThickbox('do_stuff');
    }
  });
...

Vì vậy, OpenMyThickboxchức năng javascript nên làm những gì tôi muốn:

function OpenMyThickbox(tag){
  tb_show(tag, '...'); // <- how to load content trough ajax here ?
}

sử dụng admin_url ('admin-ajax.php'); cho url
BaiNET

Tôi nhận được một trang trống. ngay cả khi tôi vào google.com
onetrickpony

Câu trả lời:


6

Tham số thứ hai cho tb_showlà URL, vì vậy bạn sẽ muốn sử dụng một cái gì đó như ..

<?php 
$ajax_url = add_query_arg( 
    array( 
        'action' => 'getTheContent', 
        'query_var1' => 'value1', 
        'query_var2' => 'value2' 
    ), 
    admin_url( 'admin-ajax.php' ) 
); 
?>
tb_show(tag, '<?php echo $ajax_url; ?>' );

Tôi đoán bạn cần phải truyền hành động và bất kỳ bình truy vấn bổ sung nào theo cách thủ công (như trên), nếu không, yêu cầu của bạn chỉ đơn giản là admin-ajax.php, khi những gì bạn đang tìm kiếm là một cái gì đó dọc theo ... admin-ajax.php?action=getTheContent&someothervar=someothervalue, do đó việc add_query_argsử dụng ở trên. .

Để làm rõ:

Cuộc gọi sau đây đến add_query_arg...

add_query_arg( 
    array( 
        'action' => 'getTheContent', 
        'query_var1' => 'value1', 
        'query_var2' => 'value2' 
    ), 
    admin_url( 'admin-ajax.php' ) 
);

Tương đương với và sẽ sản xuất ...

http://example.com/wp-admin/admin-ajax.php?action=getTheContent&query_var1=value1&query_var2=value2

Tuy nhiên!

Bây giờ tôi đã tự giải thích, tôi nhận ra rằng chúng tôi không muốn URL tuyệt đối và do đó không cần cuộc gọi đến admin_urlđó. Các mã nên thay thế.

<?php 
$ajax_url = add_query_arg( 
    array( 
        'action' => 'getTheContent', 
        'query_var1' => 'value1', 
        'query_var2' => 'value2' 
    ), 
    'admin-ajax.php'
); 
?>
tb_show(tag, '<?php echo $ajax_url; ?>'); 

Vì vậy, URL kết quả trông giống như thế này ..

admin-ajax.php?action=getTheContent&query_var1=valu1&query_var2=value2

Các hàm được tham chiếu trong các mẫu mã trên:


Sẽ không phải là $_get['action']vì cuộc gọi ajax WordPress tìm kiếm $_post['action']? hoặc là tôi sai?
Bai Internet

Thông thường, nó sẽ $_POSThoặc $_REQUESTbên trong một cuộc gọi lại ajax, trừ khi bạn đặt rõ ràng chức năng yêu cầu ajax của mình để sử dụng getthay vào đó, trong ngữ cảnh của một cuộc gọi hộp dày, chúng tôi sử dụng một chuỗi truy vấn, vẫn sẽ hiển thị trong đó $_REQUEST(vì thường giữ cả hai $_GET$_POST) ..
t31os

Không, những gì tôi đang hỏi là nếu tôi sử dụng, add_query_argcác đối số được thêm sẽ được gửi dưới dạng bài đăng hay nhận được?
BaiNET

Không, add_query_argnối thêm một chuỗi (của một url) với các tham số truy vấn, nó không thực hiện bất kỳ việc gửi nào, vì vậy tôi không chắc là tôi hiểu câu hỏi của bạn ..
t31os

Cập nhật câu trả lời của tôi ..
t31os

3

Làm rối tung javascript và PHP không thông minh lắm. Câu trả lời này chỉ gây nhầm lẫn.

tb_show là javascript add_query_arg là PHP

vì vậy giải pháp này chỉ hợp lệ trong PHP và mã thích hợp là

...
?>
tb_show(
  'whatever',
  <?php echo add_query_arg( array(
    'action' => 'getTheContent',
    'query_var1' => 'value1',
    'query_var2' => 'value2',
  ), 'admin-ajax.php'); ?>
);
<?php
...

Và trong javascript hoàn toàn không hợp lệ vì chúng tôi không thể sử dụng add_query_arg


Nơi nào khác với giải pháp ngoài việc nó có các <?php ?>thẻ trong đó? Nếu đó là tất cả những gì bạn muốn chỉ ra, thì vui lòng chỉnh sửa giải pháp để sửa nó. Không cần thêm một câu trả lời riêng để giải thích những gì sai với câu trả lời khác. Đó là lý do tại sao các chỉnh sửa cộng đồng được đánh giá cao.
kaiser

@kaiser Chỉnh sửa thay đổi ý nghĩa của bài đăng thường không được hoan nghênh. Như một câu trả lời riêng biệt, điều này là ổn.
fuxia

@toscho Và chính xác thì điều này thay đổi ý nghĩa như thế nào? Imo nó đang sửa hoặc thêm các bit bị thiếu .
kaiser

Bayen đã đúng khi chỉ ra lỗi sai ở đây, tôi đã trộn lẫn PHP và Javascript, tôi thực sự nên phát hiện ra điều đó sớm hơn. Tôi đã thực hiện các thay đổi cần thiết cho câu trả lời của mình và cảm ơn vì đã phản hồi (tôi muốn biết khi nào tôi mắc lỗi).
t31os
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.