1

我试图在我的网站上实现 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 向我展示了“tags”数组如下所示:

[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';
}

如您所见,我 error_log $tags。

当我运行这个设置时,我得到了两个错误。第一个是 $tags var,第二个是生成的。

[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 脚本中,如果您执行 a print_r($_POST['tags']),您应该会看到 JSON 的外观,然后您可以相应地调整您的代码。

更新

尝试以下 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 回答