8

何日も立ち往生している問題があります...単純なajaxPOST関数を使用して、MySQLデータベース(WPデータベースではなく)にデータを送信しようとしています。

このコードはテーマの「single-post.php」内にあります。これは、すべての投稿の前にチェックする必要があるためです。

$.ajax({ url: 'library/functions/admin_checkuser.php',
     data: {action: userID},
     type: 'post',
     success: function(output) {
                  alert(output);
     }
});

「admin_checkuser.php」スクリプトに変数を送信するだけです。このスクリプトは、データベースでアクションを実行する別のスクリプトを呼び出します。

これは「admin_checkuser」のコードです:

$userid = $_POST['action'];

echo $userid;//for testing
$oMySQL = new MySQL();
$query = "Select * FROM videotable WHERE uid = '$userid'";
$oMySQL->ExecuteSQL($query);
$bb = $oMySQL->iRecords;
$aa = $oMySQL->aResult;
echo $bb;

if ($bb == 0){
$query = "INSERT INTO videotable VALUES ('','$userid','true')";
$oMySQL->ExecuteSQL($query);
echo 'true';
    exit();

}else{
$sharing = mysql_result($aa,0,"share");
echo $sharing;
exit();

}

しかし、呼び出しがスクリプトを通過するとは思わない。これらのスクリプトは、WordPress の外部でテストされ、機能したため、WordPress で ajax 呼び出しをブロックしているものに違いありません。ところで、「admin_checkuser.php」を多くの異なるフォルダーに配置しようとしましたが、何も機能しませんでした。

前もって感謝します。

4

2 に答える 2

28

組み込みの Wordpress AJAX リクエストを使用する方がはるかに優れています。

そのため、テーマfunctions.phpファイルに、呼び出される関数を追加します。次に例を示します。

function checkUser() {

    $userid = $_POST['user']; //validation also :)
    $oMySQL = new MySQL();
    $query = "Select * FROM videotable WHERE uid = '$userid'";
    $oMySQL->ExecuteSQL($query);
    $bb = $oMySQL->iRecords;
    $aa = $oMySQL->aResult;
    echo $bb;

    if ($bb == 0){
    $query = "INSERT INTO videotable VALUES ('','$userid','true')";
    $oMySQL->ExecuteSQL($query);
    echo 'true';
        exit();

    } else {
    $sharing = mysql_result($aa,0,"share");
    echo $sharing;
    exit();

    }
}

その後、組み込みの AJAX システムに接続するフックを追加します。

add_action('wp_ajax_check_user', 'checkUser');
add_action('wp_ajax_nopriv_check_user', 'checkUser');

wp_ajax_nopriv_%sフロントエンドから呼び出せるようにします。

そして、javascript ファイルで ajax リクエストを開始するだけです。

$.post(ajaxurl, { action: 'check_user', user: userId }, function(output) {
     alert(output);
 });

が定義されていない場合ajaxurlは、テンプレート ファイルで作成する必要があります。このような方法で機能するはずですが、他の方法もあります。

add_action('wp_head','ajaxurl');
function ajaxurl() {
?>
<script type="text/javascript">
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
</script>
<?php
}

ワードプレスのバックエンドが残りを行います。

AJAX リクエストで渡されたアクションを取得し、対応する`wp_ajax(_nopriv)_%sフックを探してから、フックに割り当てられている関数を呼び出します。

また、AJAX リクエストのタイプに応じて$_POSTまたはのいずれかで渡されます。$_GET

Wordpress 内での AJAX の使用について、もう少し読むことができます。

于 2012-05-14T19:13:00.580 に答える
2

ajax 呼び出しの URL を確認する必要があります。

相対 URL の代わりに完全な URL を使用することもできます。

テーマの場所が原因で URL が正しくない可能性があります。あなたの ajax コードがテーマ フォルダーにあると仮定しています。

テーマ ディレクトリを取得する wordpress 関数がいくつかあります。

たとえば、このページhttp://yourwebpage/test/にいる場合、ajax 呼び出しは here になりますhttp://yourwebpage/test/library/functions/admin_checkuser.php。これは間違った場所だと思います。

これが、スクリプトに絶対 URL を追加する必要がある理由です。テーマにある場合は、このメソッドget_template_directory_uri()を使用してテンプレート ディレクトリを取得できます。

ここを参照してください: http://codex.wordpress.org/Function_Reference/get_template_directory_uri

于 2012-05-14T18:52:18.623 に答える