1

Web サイトに Tagit を実装しようとしましたが、タグの配列を希望どおりに動作させることができません...

私はググって、さまざまなことを試しましたが、うまくいきません。

これは私のJavaScript関数です:

function saveSkillTags( tags ) {
$.ajax({
  type: "POST",
  dataType: "json",
traditional: true,
  url: "/../includes/ajaxController.php",
  data: {actionCommand : "SAVE_SKILL_TAGS", tags : tags }
}).done(function( res ) {
    console.debug('klar');
});
}

Console.debug は、「タグ」配列が次のようになっていることを示しました。

[Object { label="php",  value="php",  element=[1],  mer...}, Object { label="ajax",  value="ajax",  element=[1],  mer...}, Object { label="javascript",  value="javascript",  element=[1],  mer...}, Object { label="jquery",  value="jquery",  element=[1],  mer...}]

このコードを持つ私のajaxControllerに投稿します:

if( $actionCommand == 'SAVE_SKILL_TAGS' ) {
require_once( dirname( __FILE__ ).'/../classes/stuff.class.php' );
$list = new UserStuff();
$list->saveSkillTags( $utility->getUserId(), $_POST['tags'] );
}

というわけで、ここまでは順調...

次に、stuff.class.php に "saveSkillTags" 関数があります。ここに問題があります... jsonをエンコードおよびデコードしようとしましたが、jsonなしで試してみましたが、何も動作しません...ここに関数があります:

function saveSkillTags( $userId, $tags ) {
    $dbCon = new DBConnection();
    //$tags = json_decode($tags);
    error_log($tags);
    foreach ( $tags as $tag => $value ) {
        $skillTag = $dbCon->escape( $value );
        $query = "INSERT INTO skilltag SET ";
        $query .= "User_fk=".$userId;
        $query .= ", TagName='".$skillTag."'";
        $dbCon->execute( $query );
        error_log($query);
    }
    
    mysql_close();
    echo 'true';
}

ご覧のとおり、$tags を error_log に記録します。

このセットアップを実行すると、2 つのエラーが発生します。1 つ目は $tags 変数で、2 つ目は生成されます。

[24-Aug-2012 22:28:35] [object Object]

[24-Aug-2012 22:28:35] PHP Warning:  Invalid argument supplied for foreach() in C:\Users\...\classes\stuff.class.php on line 103

私はこれを数時間いじりましたが、私のプログラミングスキルを大いに疑い始めています...

軌道に戻るのを手伝ってください。ヒントでも大歓迎です!

4

1 に答える 1

1

あなたがする必要があるのは、内部のデータtagsを JSON として渡すことです - 現在、それはオブジェクトに投稿されています。これを行うにはJSON.stringify()

$.ajax({
  type: "POST",
  dataType: "json",
traditional: true,
  url: "test.php",
  data: {actionCommand : "SAVE_SKILL_TAGS", tags : JSON.stringify(tags) }
}).done(function( res ) {
    alert(res);
});
});

JSON.stringifyほとんどの最新のブラウザーで利用できます (ただし、一部の古いブラウザーでは利用できない場合があります)。基本的に、Javascript オブジェクトを受け取り、それを JSON 文字列に変換します。文字列化する場合、結果の JSON が有効であることを確認するために、引用符などをエスケープする場合があることに注意してください。

したがって、PHP スクリプトでprint_r($_POST['tags']).

アップデート

次の foreach ループを試してください。

foreach ( $tags as $tag => $value ) 
{ 
    $skillTag = $value->value; 
    $query = "INSERT INTO skilltag (User_fk, TagName) values ('".$userId."','".$skillTag."')"; 
    $dbCon->execute( $query ); 
}
于 2012-08-24T21:51:01.237 に答える