JQuery Ajax标记数组到PHP返回[object]
我尝试在我的网站上实现Tagit,但我无法让标签数组以我希望的方式运行 我在谷歌上搜索并尝试了很多不同的东西,但都没能成功 这是我的JavaScript函数:JQuery Ajax标记数组到PHP返回[object],php,javascript,jquery,ajax,arrays,Php,Javascript,Jquery,Ajax,Arrays,我尝试在我的网站上实现Tagit,但我无法让标签数组以我希望的方式运行 我在谷歌上搜索并尝试了很多不同的东西,但都没能成功 这是我的JavaScript函数: function saveSkillTags( tags ) { $.ajax({ type: "POST", dataType: "json", traditional: true, url: "/../includes/ajaxController.php",
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');
});
}
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';
}
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( 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');
});
}
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变量,第二个是生成的
[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传递-目前它被发布为一个对象。为此,请使用JSON.stringify()
JSON.stringify
在大多数现代浏览器中都可用(但在一些旧浏览器中可能不可用)。基本上,它接受一个Javascript对象并将其转换为JSON字符串。请注意,当字符串化时,它可能会转义引号和其他内容,以确保生成的JSON有效
因此,在PHP脚本中,如果执行打印($\u 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传递-目前它被发布为一个对象。为此,请使用JSON.stringify()
JSON.stringify
在大多数现代浏览器中都可用(但在一些旧浏览器中可能不可用)。基本上,它接受一个Javascript对象并将其转换为JSON字符串。请注意,当字符串化时,它可能会转义引号和其他内容,以确保生成的JSON有效
因此,在PHP脚本中,如果执行打印($\u 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\u decode
并执行var\u dump
而不是error\u log
,这样您就可以看到数据结构。只要我重新安装json\u decode
它就不会显示任何内容,而不是[object object]
…好的,不带json解码的$tags
的var\u dump
是什么?它将显示在页面上,而不是错误日志上。响应是“[{”label:“kaljsd”,“value:“kaljsd”,“element:{”0:{},“length:”1},“index:”0},{”label:“laksjd”,“value:”laksjd”,“value:”laksjd”,“element:{”0:{},“length:”1},“index:”1},{”label:“lkajdasd”,“value:”lkajdasd”,“element:{”0:{”0:{,“length:“index:”2}”
但这是带有JSON.stringify(标记)
的@Raidenace技巧。现在我只是想通过一个for循环来解析它,我不是这方面的专家……只要json\u decode
那个json,你就可以使用foreach
。试着重新安装json\u decode
并执行var\u dump
而不是error\u log
,这样你就可以看到数据结构了json\u decode
它不显示任何内容,而显示[object object]
…好的,没有json\u decode
的var\u dump
是什么?它将显示在页面上,而不是错误日志上。响应是“[{”label:“kaljsd”,“value:“kaljsd”,“element:{”0:{},“length:”1},“index:”0},{”label:“laksjd”,“value:”laksjd”,“value:”laksjd”,“element:{”0:{},“length:”1},“index:”1},{”label:“lkajdasd”,“value:”lkajdasd”,“element:{”0:{”0:{,“length:“index:”2}”
但这是带有JSON.stringify(标记)
的@Raidenace技巧。现在我只是通过一个for循环来解析它,我不是这方面的专家……只要json\u解码该json,你就可以使用foreach
。这就得到了json!好极了!现在我只是有太多的循环,通过一个for循环,但我会尝试!谢谢你!更新了一些代码,帮助您将字符串转换为PHP对象数组,这将使循环更容易。感谢您的帮助!但是当我这样循环时:foreach($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可捕获致命错误:stdClass类的对象无法转换为C:\Users\…\stuff.class.PHP第109行中的字符串
我不知道如何循环它,因此它获取值,我尝试了很多。再次非常感谢<代码>我收到此错误:[25-Aug-2012 01:04:08]PHP可捕获致命错误:stdClass类的对象无法转换为C:\Users\…\stuff.class.PHP第109行的字符串
*是否可以执行打印($tags)编码>(在for循环之前)并粘贴输出,这样我就可以看到你在循环什么?这就得到了json!好极了!现在我只是有太多的循环,通过一个for循环,但我会尝试!谢谢你!更新了一些代码,帮助您将字符串转换为PHP对象数组,这将使循环更容易。感谢您的帮助!但是当我这样循环时:foreach($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-20