2015-10-14 114 views
0

我正在创建一个自定义wordpress插件,它有一个前端形式,我希望数据与AJAX一起发送到数据库,并且还返回响应以更新前端表。WordPress前端AJAX表单提交500内部服务器错误

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

所以我的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和萤火虫它给我500内部服务器错误 - 后值是好的

回答

0

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

+0

我已经添加了需要 '的wp-config.php文件' 在顶部,现在它似乎工作...除userid之外的数据都存储在db –

+0

这是一个非常糟糕的做法,至少要添加wp-load.php,而不是wp-config.php。请参阅http://ottodestruct.com/blog/ 2010 /不要-包括-WP-负载请/ – ThemesCreator