【问题标题】:WordPress frontend AJAX Form submission gives 500 internal server errorWordPress 前端 AJAX 表单提交给出 500 内部服务器错误
【发布时间】:2016-01-12 15:36:45
【问题描述】:

我正在创建一个自定义 wordpress 插件,它有一个前端表单,我希望使用 AJAX 将数据发送到数据库,并返回一个响应以更新前端表。

一切看起来都不错,直到我点击“提交”按钮

所以我的 AJAX 是:

$('#form').submit(function(event) {

    var formData = {
        'user'              : $('input[name=userid]').val(),
        'cardname'             : $('input[name=card]').val(),
        'setname'             : $('input[name=setname]').val(),
        'quantity'    : $('input[name=quantity]').val(),
        'multiverseid'    : $('input[name=multiverseid]').val()
    };

    // process the form
    $.ajax({
        type        : 'POST', // define the type of HTTP verb we want to use (POST for our form)
        url         : ''+base_url+'/website/wp-content/plugins/test/public/js/process.php', // the url where we want to POST
        data        : formData, // our data object
        dataType    : 'html', // what type of data do we expect back from the server
        encode          : true,
        success : function(updatedTable) {
            $('div#tableHolder').html(updatedTable);
        }
    })

       });

 // stop the form from submitting the normal way and refreshing the page
    event.preventDefault();

   });
});

将添加数据的 process.php 文件是:

global $wpdb;

$wpdb->insert( 
'wp_mycards', 
array( 
    'user' => $_POST[userid], 
    'cardname' => $_POST[cardname],
     'setname' => $_POST[setname],
     'quantity' => $_POST[quantity],
     'multiverseid' => $_POST[multiverseid] 

     )
 );



$data="<table><tr><td>Image</td><td>Name</td><td>Set</td><td>Quantity</td></tr>";

$user_ID = get_current_user_id();
$cards = $wpdb->get_row( "SELECT * FROM $wpdb->wp_mycards WHERE user = ".$user_ID."" );

while ($row = mysql_fetch_assoc($cards)) { 

    $data.='<tr><td align="center"><img src="http://gatherer.wizards.com/Handlers/Image.ashx?multiverseid='.$row[multiverseid].'&type=card" width="30" height="42" /></td><td align="left">'.$row[cardname].'</td><td align="center">'.$row[setname].'</td><td align="center">'.$row[quantity].'</td></tr>';

  }

 $data.="</table>";

 echo $data;

-我在 firefox 上运行它,在 firebug 上它给了我 500 内部服务器错误-post 值很好

【问题讨论】:

    标签: ajax database wordpress forms plugins


    【解决方案1】:

    AJAX 在 WordPress 中有点不同。就像后端使用 AJAX 一样,WordPress 也可以使用 ajax,您只需要使用正确的函数即可。

    在 WordPress 中,每个 AJAX 请求都通过 wp-admin 文件夹中的 admin-ajax.php 文件,您需要一些操作来挂钩它。 AJAX 请求 URL 应指向此文件。在此处阅读有关如何操作的完整教程:https://premium.wpmudev.org/blog/using-ajax-with-wordpress/

    一开始可能会觉得有点复杂,拿到手后买也没那么难。您将需要以下功能:

    wp_ajax_my_action

    wp_ajax_nopriv_my_action

    wp_localize_script

    【讨论】:

    • 我在顶部添加了 require 'wp-config.php',现在它似乎可以工作了......除了用户 ID 之外的数据都存储在数据库中
    • 这是一个非常非常糟糕的做法,至少添加 wp-load.php,而不是 wp-config.php.. 见解释:ottodestruct.com/blog/2010/dont-include-wp-load-please
    【解决方案2】:
    $('#form').submit(function(event) {
    
        event.preventDefault();
        var formData = {
            'user'              : $('input[name=userid]').val(),
            'cardname'             : $('input[name=card]').val(),
            'setname'             : $('input[name=setname]').val(),
            'quantity'    : $('input[name=quantity]').val(),
            'multiverseid'    : $('input[name=multiverseid]').val()
        };
    
        // process the form
        $.ajax({
            type        : 'POST', // define the type of HTTP verb we want to use (POST for our form)
            url         : 'http://example.com/wordpress/process.php', // the url where we want to POST
            data        : formData, // our data object
            dataType    : 'html', // what type of data do we expect back from the server
            encode          : true,
            success : function(updatedTable) {
                //alert(updatedTable);
                $('div#tableHolder').html(updatedTable);
            }
        })
    
           });
    

    AND 在 process.php 中

    global $wpdb;
    
    
    $wpdb->insert( 
    'wp_mycards', 
     array( 
        'user' => $_POST['user'], 
        'cardname' => $_POST['cardname'],
        'setname' => $_POST['setname'],
        'quantity' => $_POST['quantity'],
        'multiverseid' => $_POST['multiverseid'] 
    
         )
     );
    
    
    
    $data="<table><tr><td>Image</td><td>Name</td><td>Set</td>     <td>Quantity</td></tr>";
    
    $user_ID = $_POST['user'];
    
    $cards = $wpdb->get_row( "SELECT * FROM wp_mycards WHERE user = ".$user_ID."" );
    
    $data.='<tr><td align="center"><img src="http://gatherer.wizards.com/Handlers/Image.ashx?multiverseid='.$cards->multiverseid.'&type=card" width="30" height="42" /></td><td align="left">'.$cards->cardname.'</td><td align="center">'.$cards->setname.'</td><td align="center">'.$cards->quantity.'</td></tr>';
    
    
     $data.="</table>";
    
     echo $data;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      相关资源
      最近更新 更多