【问题标题】:JQuery Ajax Tagit Array to PHP returning [object Object]JQuery Ajax Tagit Array 到 PHP 返回 [object Object]
【发布时间】:2012-08-20 10:29:08
【问题描述】:

我尝试在我的网站上实现 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

我已经玩了好几个小时了,开始严重怀疑我的编程技能......

请帮助我回到正轨,即使是提示也将不胜感激!

【问题讨论】:

  • 尝试重新设置json_decode 并使用var_dump 而不是error_log,这样您就可以看到数据结构了。
  • 一旦我重新设置json_decode,它什么都没有显示,而不是[object Object]...
  • 好的,没有json_decode$tagsvar_dump 是什么?它将显示在页面上,而不是错误日志中。
  • 回复是"[{"label":"kaljsd","value":"kaljsd","element":{"0":{},"length":1},"index":0},{"label":"laksjd","value":"laksjd","element":{"0":{},"length":1},"index":1},{"label":"lkajdasd","value":"lkajdasd","element":{"0":{},"length":1},"index":2}]" 但这是@Raidenace 提示和JSON.stringify(tags)。现在我只是以某种方式通过一个 for 循环解析它,我不是...
  • 只要 json_decode 那个 Json 和 foreach 就可以了。

标签: php javascript jquery ajax arrays


【解决方案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']),您应该会看到 JSON 的外观,然后您可以相应地调整您的代码。

更新

尝试以下 foreach 循环:

foreach ( $tags as $tag => $value ) 
{ 
    $skillTag = $value->value; 
    $query = "INSERT INTO skilltag (User_fk, TagName) values ('".$userId."','".$skillTag."')"; 
    $dbCon->execute( $query ); 
}

【讨论】:

  • 这让我得到了 json!甜的!现在我也只是通过一个 for 循环来循环它,但我会尝试的!到目前为止谢谢!
  • 更新了一些代码以帮助您将字符串转换为 PHP 对象数组,这样可以更轻松地循环遍历它
  • 非常感谢您的帮助!但是当我像这样循环它时:foreach ( $tags as $tag => $value ) { $skillTag = $value; //$skillTag = $dbCon->escape( $value ); $query = "INSERT INTO skilltag SET "; $query .= "User_fk=".$userId; $query .= ", TagName='".$skillTag."'"; $dbCon->execute( $query ); } 我得到了这个错误:[25-Aug-2012 01:04:08] PHP Catchable fatal error: Object of class stdClass could not be converted to string in C:\Users\...\stuff.class.php on line 109 我不知道如何循环它,所以它得到了值,我已经尝试了很多。再次感谢!
  • I get this error: [25-Aug-2012 01:04:08] PHP Catchable fatal error: Object of class stdClass could not be converted to string in C:\Users\...\stuff.class.php on line 109 *
  • 你能做一个print_r($tags);(在for循环之前)并粘贴输出,这样我就可以看到你在循环什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 2014-06-07
  • 2020-07-18
  • 2012-03-05
  • 1970-01-01
相关资源
最近更新 更多