【问题标题】:Ajax test (wordpress)Ajax 测试(wordpress)
【发布时间】:2015-07-14 21:29:47
【问题描述】:

所以,我一直在努力使 ajax 工作。 这是我之前的问题:AJAX (admin_url('admin-ajax.php');?action=) Not Found

无论如何,我决定缩小范围,只保留必要的文件。

这里是设置。

test.php

  <div class="test">
       <a href="#test_demo" id="demo">Items</a>      
  </div>
  <div id="test_demo"> </div>  


<script>

  jQuery(document).ready(function() {
     jQuery('.test a').click(function(e) {
        e.preventDefault();

        var tab_id = jQuery('this').attr('id'); 


        jQuery.ajax({
            type: "GET",
            url: "<?php echo admin_url('admin-ajax.php'); ?>", 
            dataType: 'html',
            data: ({ action: 'test_tab', id: tab_id}),
            success: function(data){
                  jQuery('#test_' + tab_id).html(data);

        },
        error: function(data)  
        {  
        alert("Error!");
        return false;
        }  

        }); 

     }); 
     }); 


</script>

function.php

function test_tab_callback() {       
    $template_part_path = 'page-parts/test_' . $_GET['id'];
    get_template_part($template_part_path);
    exit;
 }
add_action('wp_ajax_test_tab', 'test_tab_callback');
add_action('wp_ajax_nopriv_test_tab', 'test_tab_callback');

test_demo.php

<div id="test_demo_content">Demo Content</div>

这是我对它应该如何工作的想法。

  1. test.php:当用户点击Items按钮时,jQuery中的tab_id变量保存了锚点id(本例中为id="demo")。
  2. 然后调用admin-ajax.php。
  3. 然后将保存的 id ("demo") 传递到 function.php 并在变量 $template_part_path = 'page-parts/test_' . $_GET['id']; 中使用,该变量为 page-parts/test_demo 提供 test_demo.php
  4. 然后调用模板部分,回调给jQuery。

  5. 然后将数据“插入”到jQuery('#test_' + tab_id).html(data);,即id="test_demo

  6. test_demo.php 内容应该显示在#test_demo div 中。

但它不起作用。我使用了console.log(data),但没有显示任何结果。 我做错了什么?

【问题讨论】:

  • div 元素上的 href 属性无效(在 test.php 中,id 为 test_demo 的 div
  • 哎呀,它是固定的。 (不是实际问题)。感谢您指出。
  • 我得到了 javascript 在我的答案中工作,但无法测试 php 方面的东西。能否请您应用修复并告诉我这是否适合您?
  • 正如您指出的那样,我通过删除引号使其正常工作! =) 你让我很开心!哈哈

标签: javascript php jquery ajax


【解决方案1】:

当您获得“this”的 jquery 对象时,您不能使用引号。这使 tab_id 成为未定义并破坏了其余部分。

这就是我的意思:

http://jsfiddle.net/7r1dg7L4/2/

jQuery(document).ready(function() {
     jQuery('.test a').click(function(e) {
         e.preventDefault();
         var tab_id = jQuery(this).attr('id'); 
         alert(tab_id);
     });
});

【讨论】:

  • 非常感谢!! =)))我让它工作了!我简直不敢相信那句简单的引语毁了我生命的最后两天。!非常感谢您指出问题!
  • 没问题。欢迎编程/开发。我盯着代码看了好几个小时,错过了一个毁了一切的大写字母:)
  • 哈哈。它肯定会迫使你成为一个完美主义者才能让事情顺利进行。哈哈。谢谢比尔! =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 2016-08-25
  • 1970-01-01
相关资源
最近更新 更多