JQuery&AJAX将数据发送到php

时间:2013-09-13 作者:David Garcia

在jquery脚本中,我有;

jQuery.ajax(
        ajaxurl, {
        action: \'lu_ajax\',
        status: \'enabled\'
        },
        success: function (a) {
        alert(a)
        }
在我的文件中。php我有;

add_action(\'wp_ajax_lu_ajax\', \'lu_ajax\');
add_action(\'wp_ajax_nopriv_lu_ajax\', \'lu_ajax\'); //for logged users
function lu_ajax() {

    if($_GET[\'status\'] != \'\') {
            $value = $_GET[\'status\'];
            echo $value;
            setcookie("status", $value, time()+3600, "/");
    }
}
我正在包括文件。主插件中的php,如require\\u once(\'inc/file.php\');

但是,没有设置cookie或任何值被回显,请任何人告诉我问题是什么。起初,我遇到的问题是,我直接调用文件,导致wp函数未定义,因此建议我使用ajaxurl,然后使用要执行的操作和要发送给php的变量,但现在什么都没有发生。

另外,jquery和php都在同一个文件中。php我没有单独的js文件,因为它不符合我的目的。

update new issue当我从jquery发出ajax调用时,我会根据条件启动它们,下面是一个示例;

var stat= true;
                jQuery.ajax({
                    type: \'POST\',
                    url: ajaxurl,
                    data: {action: \'lu_ajax\', status: \'enabled\'},
                    success: function (a) {
                        alert(a)
                    }
                });
        } else {
            var stat= false;
            jQuery.ajax({
                    type: \'POST\',
                    url: ajaxurl,
                    data: {action: \'lu_ajax\', status: \'false\'},
                    success: function (b) {
                        alert(b)
                    }
                });
            }
然而,cookie总是设置为enabled,这意味着只进行了第一次调用,当我手动将其设置为false进行测试时,问题不在这种情况下。

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成

首先,你的js是错误的,你把jQuery.post() 和的jQuery.ajax()

您应该使用

jQuery.ajax({
  type: "POST",
  url: ajaxurl,
  data: { action: "lu_ajax", status: "enabled" },
  success: function( data ) {
    alert(data);
  }
});

jQuery.post(
  ajaxurl,
  { action: "lu_ajax", status: "enabled" },
  function(data) {
    alert(data);
  }
);
在那之后the ajaxurl js variable is available only in admin pages, not in frontend.

所以上面的代码只能在管理页面中使用,但一旦使用add_action(\'wp_ajax_nopriv_lu_ajax\', \'lu_ajax\'); 我认为您希望在前端使用ajax,在这种情况下,您必须通过wp_localize_script.

因此,如果上面驻留js代码的js脚本命名为“my\\u ajax”。并驻留在插件的“js”子文件夹中,执行以下操作

add_action(\'wp_enqueue_scripts\', function() {
  wp_enqueue_script(\'my-ajax\', plugins_url(\'js/my_ajax.js\', __FILE__) );
  wp_localize_script(
    \'my-ajax\',
    \'myAjaxData\',
     array( \'ajaxurl\' => admin_url(\'admin-ajax.php\') )
  );
});
现在,替换上面js代码中的ajaxurl 具有myAjaxData.ajaxurl

SO网友:david.binda

ajaxurl仅在admin中设置。如果这是一个前端ajax(由于nopriv,看起来像是这样),则必须在排队时本地化脚本:

add_action( \'wp_enqueue_scripts\', \'my_enqueue\' );
function my_enqueue($hook) {

    wp_enqueue_script( \'ajax-script\', plugins_url( \'/js/my_query.js\', __FILE__ ), array(\'jquery\'));

    // in javascript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
    wp_localize_script( \'ajax-script\', \'ajax_object\',
            array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ), \'we_value\' => 1234 ) );
}
在JS文件中,您可以访问ajax\\u url作为ajax\\u对象的变量:

jQuery.ajax(
        ajax_object.ajax_url, {
        action: \'lu_ajax\',
        status: \'enabled\'
        },
        success: function (a) {
        alert(a)
        }
请参见http://codex.wordpress.org/AJAX_in_Plugins

结束

相关推荐

`wp_EDITOR()`css弄乱了jQuery对话框

我有一个自定义管理页面,其中包括wp_editor() 和jQuery对话框。由于我不知道的原因wp_editor() 使用一些与dialog相同的css类名,尤其是一个(ui-widget-overlay) 正在破坏我的jQuery对话框。由于z-index 由设置的覆盖editor.css, 覆盖层较深,中间有一条在中间。以前是否有人遇到过此问题?如果是,你是如何解决的?function do_refreshing_invitees_dialog(){ ?> <