Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery Ajax标记数组到PHP返回[object]_Php_Javascript_Jquery_Ajax_Arrays - Fatal编程技术网

JQuery Ajax标记数组到PHP返回[object]

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",

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