javascript - 创建收藏夹/书签列表

标签 javascript php jquery ajax json

我目前正在尝试在我的网站上创建收藏夹/书签列表,该列表的目的是用户可以双击链接或单击图标以将链接设置为收藏夹。我遇到的问题是该链接可以两次附加到列表中。有人可以告诉我我做错了什么吗?

我将对象中的 linkID 和 linkContent 保存到文件中,然后读取该文件。该链接也可以在文件中附加两次。如何停止在文件中保存重复项?

代码如下:

function SaveToFavouriteLinkFile(linkID, linkContent) {

  var saveFavouriteLinkObject = {};
  saveFavouriteLinkObject.linkID = linkID;
  saveFavouriteLinkObject.linkContent = linkContent;
  // Writing
  $.ajax({
    global: false,
    type: "POST",
    cache: false,
    dataType: "json",
    data: ({
      action: 'write',
      content: saveFavouriteLinkObject
    }),
    url: 'php/saveFavouriteLinks.php',
    success: function(data) {
      console.log(data);
    },
    error: function(data) {
      alert(JSON.stringify(data));
    }
  });
}


$(document).dblclick(function(e) {
  switch (e.target.innerText) {
    case " Server":

      $("#favouritesList").append("<li><a id='serverBTNFav' class='selectNavigationBTN'><i class='fa fa-dashboard fa-fw'></i> Server <i class='glyphicon glyphicon-star pull-right'></i></a></li>");
      SaveToFavouriteLinkFile("serverBTNFav", "Server");

      break;

    case " Group":
      $("#favouritesList").append("<li><a id='groupBTNFav' class='selectNavigationBTN'><i class='fa fa-dashboard fa-fw selectNavigationBTN'></i> Group <i class='glyphicon glyphicon-star pull-right'></i></a></li>");
      SaveToFavouriteLinkFile("groupBTNFav", "Group");

      break;

    case " User":

      $("#favouritesList").append("<li><a id='userBTNFav' class='selectNavigationBTN'><i class='fa fa-dashboard fa-fw selectNavigationBTN'></i> User <i class='glyphicon glyphicon-star pull-right'></i></a></li>");
      SaveToFavouriteLinkFile("userBTNFav", "User");

      break;

    case " Sync":

      $("#favouritesList").append("<li><a id='syncBTNFav' class='selectNavigationBTN'><i class='fa fa-dashboard fa-fw selectNavigationBTN'></i> Sync <i class='glyphicon glyphicon-star pull-right'></i></a></li>");
      SaveToFavouriteLinkFile("syncBTNFav", "Sync");

      break;

    case " Patient Listing":

      $("#favouritesList").append("<li><a id='PatientListBTNFav' class='selectNavigationBTN'><i class='fa fa-dashboard fa-fw selectNavigationBTN'></i> Patient Listing <i class='glyphicon glyphicon-star pull-right'></i></a></li>");
      SaveToFavouriteLinkFile("PatientListBTNFav", "Patient Listing");

      break;

    case " App Settings":

      $("#favouritesList").append("<li><a id='AppSettingsBTNFav' class='selectNavigationBTN'><i class='fa fa-dashboard fa-fw selectNavigationBTN'></i> App Settings <i class='glyphicon glyphicon-star pull-right'></i></a></li>");
      SaveToFavouriteLinkFile("AppSettingsBTNFav", "App Settings");

      break;

    case " Logging":

      $("#favouritesList").append("<li><a id='LoggingBTNFav' class='selectNavigationBTN'><i class='fa fa-dashboard fa-fw selectNavigationBTN'></i> Logging <i class='glyphicon glyphicon-star pull-right'></i></a></li>");
      SaveToFavouriteLinkFile("LoggingBTNFav", "Logging");

      break;
  }
});

PHP 代码:

switch ($_REQUEST['action']) {
      case 'write':

        // New favourites item for list
        $favouriteLink = $_REQUEST['content']['linkContent'];
        // New favourites item ID
        $favouriteLinkID = $_REQUEST['content']['linkID'];
        // File for item to be stored
        $file = "favouriteLinks.txt";

        // Existing items in favourites list
        $json = json_decode(file_get_contents($file), true);


        $result = getArrayIndex($json, $favouriteLink);

        if (empty($result)) {
          echo json_encode("I did not find your string: ".$favouriteLink);
        } else {
          echo json_encode("The index of your main array, where  '".$favouriteLink.
            "' found is: ".$result);
        }

        foreach ($json as $obj) {
			  	if ($obj['favouriteLinkContent'] == $favouriteLink)
			  	{
			  		echo json_encode("HELLO");
			  		break;
			  	}
                else
                {
                
				    $json[] = array("favouriteLinkContent" => $favouriteLink, "favouriteLinkID" => $favouriteLinkID);
					file_put_contents($file, json_encode($json));
                }
			}


        break;

      case 'read':

        $data = file_get_contents('favouriteLinks.txt');
        echo $data;

        break;
    }

最佳答案

试试这个:

$linkexists = false;    
foreach ($json as $obj) {
   if ($obj['favouriteLinkContent'] == $favouriteLink) {
    echo json_encode("HELLO");
    $linkexists = true;
   }

}

if(!$linkexists){
   $json[] = array("favouriteLinkContent" => $favouriteLink,
                   "favouriteLinkID" => $favouriteLinkID);
   file_put_contents($file, json_encode($json));
}

因为每次遇到不具有相同链接内容的 $obj 时,您都会插入(因此,如果前几个 $obj 对象有不同的对象,您将插入相同的最喜欢的 obj,直到遇到具有相同内容的一个)

关于javascript - 创建收藏夹/书签列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30573543/

相关文章:

javascript - 如何在谷歌浏览器中从 HTML 运行 python 脚本?

javascript - 如何禁用 `datepickr.js` 中的过去日期?

php - 创建了一个搜索表单,该表单向 SQL 查询添加了条件,但由于 'AND' 语句而返回 0 个结果

javascript - radio 隐藏。改为显示 div 类。单击 div 选择链接的 radio

javascript - 第二个 div 对象不会打开弹出窗口

php - jquery切换功能的问题

javascript - Flask+AJAX+Jquery+JINJA动态更新HTML Table

php - 如何防止 "remember me"cookie 垃圾邮件?

php - 如何使用 php system() 函数正确运行 mysql 命令?

javascript - 橡皮筋与 iScroll 和 jQuery 移动