简单的jQuery AJAX请求无法运行PHP脚本

时间:2016-07-13 作者:Alex

我对我的WordPress站点有一个非常简单的AJAX请求。我的PHP函数是一个switch语句,除了我最近添加的一个(change\\u due\\u date)之外,所有其他switch语句都可以工作。

我注释掉了新“case”中的大部分代码,以便更好地找到问题。

AJAX(在页面底部,在我的另一个AJAX请求(有效)下):

      function my_ajax() {      

          var newDate = <?php echo $new_date; ?>;
          var data_string = \'action=do_ajax&fn=change_due_date&newDate=\' + newDate;

          jQuery.ajax({                         
            type: "POST",
            url: \'/wp-admin/admin-ajax.php\',
            data: data_string,
            dataType: \'JSON\',
            success: function(data){
                // alert(data); 
                console.log("success!");
            },
            error: function(errorThrown){
                console.log("error!");
            }

          });

      } // end of my_ajax function

      jQuery(\'a.test\').click(function(){
         my_ajax();
      });

    </script>
起初,我尝试只发送“newDate”作为我的“data”值,这确实有效(就像AJAX返回的“success!”)。在这种情况下,我的PHP函数仍然没有运行,因为它没有被调用。我怀疑我在AJAX方面的格式有问题。。。

现在,当我发送“data\\u string”作为我的数据时,我得到了一个AJAX错误。。。

PHP函数:

switch($_POST[\'fn\']){  ...    
    /* AUTOMATE DUE DATE CREATION - made by Alex */
    case \'change_due_date\' :
        /*$field_key = "field_515b2428887d7";   // Key ID for field
        $new_date = $_POST[\'newDate\']; // new date      
        $new_due_date = DateTime::createFromFormat(\'Ymd\', $new_date);
        $new_due_date->format(\'Ymd\'); // formatting */
        echo (\'<h1>functioning</h1>\'); // testing purposes

        /*$parent_field = get_field($field_key); // Select parent field
        foreach($parent_field as $sub_row) :                
            // Change value of sub-fields   
            $sub_row[\'date_due\'] = $new_due_date;


            $new_values[] = $sub_row; //  Load new values into array
        endforeach; 
        update_field( $field_key, $new_values ); // Update ACF*/
        $output = "Successfully updated due dates."; // testing
    break;
... }
我已经在这段代码上工作了几天-我承认我在AJAX方面不是最好的。。。但我似乎找不到问题所在?我已经查看了WP Codex,以获得有关如何构建AJAX的指导。

2 个回复
SO网友:Ronak Dave

对于您的问题,一个简单的答案是,您在ajax请求中的数据类型为JSON,并且您正在其中传递一个字符串。当选择数据类型等于json时,需要在ajax请求中传递json对象。JSON对象通常是花括号内的密钥对值。这里有一个参考资料,您可以从中了解如何在WordPress中实现ajax请求。

https://www.smashingmagazine.com/2011/10/how-to-use-ajax-in-wordpress/https://stackoverflow.com/questions/14185582/creating-an-ajax-call-in-wordpress-what-do-i-have-to-include-to-access-wordpres

检查ajax函数中的数据。在将json发送到服务器之前,需要验证json,这样就不会再有任何问题。您还需要在PHP服务器端解码json。然后,只有您才能操作PHP代码中的数据。另一种可能的方法是,您可以在不使用数据类型json的情况下发出请求,并且可以在PHP代码中获得post值,从而使其易于使用。检查以下链接以供参考。

http://www.makeuseof.com/tag/tutorial-ajax-wordpress/

SO网友:scott

我认为您建立数据的方式可能有问题。如果您在AJAX上阅读WP Codex,您将看到示例中的数据是以键/值对的形式出现的。也就是说,数据应该如下所示:

var data = {
        \'action\' : \'do_ajax\',
        \'fn\' : \'change_due_date\',
        \'newDate\' : newDate
    };
此外,请注意,法典中说ajaxurl 指向/wp admin/admin ajax。php(自版本2.8起)。有时,除非你打电话,否则这行不通wp_localize_script() 第一

就我个人而言,我不使用datatype: \'JSON\'. 我不能说你的计划是否被破坏,把它包括在你的数据中。

最后,在将数据发送回AJAX调用的PHP函数末尾,不要忘记这一点:

echo $output;
wp_die();