【问题标题】:is my code victim of same origin policy?我的代码是同源政策的受害者吗?
【发布时间】:2011-05-01 20:08:35
【问题描述】:

这是我的代码。您必须仔细看看它是否受到这种形状的“同源政策”的影响。 HTML 的域是 (http://127.0.0.1/jqload.html) 和 php 文件 (http://127.0.0.1/conn_sql.php)。这是 json 格式:[{"options":"smart_exp"},{"options":"user_int"},{"options":"blahblah"}] 我实际上想将我在 HTYML 中收到的 json 数据附加到用户输入中,而我正为此受苦。如果我使用 eval 进行解析,则可以将其指向此处。但是如果我使用 JSON.parse 进行解析,整个代码将停止工作并发出此错误消息“重要提示:在部署之前从 json2.js 中删除此行”。我将我的代码放在 stackoverflow 论坛上以解决其他问题,并被告知我的代码受到“同源策略”的影响,这会导致附加 JSON 数据时出现问题。那么您能看看我的代码是否受到此政策的影响?虽然我怀疑它是否会受到该政策的影响,因为我了解到它会限制文件是否位于不同的域中,但这里两个文件彼此相邻。

代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">
<html><head></head>
 <body> 
  <form name="index">
   <p><input type = "text" id = "txt" name = "txt"></input>
   <p><input type = "button" id = "send" name = "send" value = "send" onClick= 
       "ADDLISTITEM"></input>
   <p><select name="user_spec" id="user_spec" />
  </form>
  <script>
  function ADDLISTITEM()
  {
      alert (json.length); // working
      alert json.options[1]; // do not show any value, message just for testing
      json.options[json.length+1] = 'newOption'; //not working; HELP HERE
      jsonString = JSON.stringify(json);//working fine for current data
      alert(jsonString);
      //here I have to implement send this stringify(json) back to server,HELP  
      //HERE     
  }                    
  </script>
  <script src="http://code.jquery.com/jquery-latest.min.js"></script>
  <script>
  var json;
  $(document).ready(function() { 
      jQuery .getJSON("http://127.0.0.1/conn_mysql.php", function (jsonData) {
          json = jsonData;
          $.each(jsonData, function (i, j) {
              document.index.user_spec.options[i] = new Option(j.options);
          });
      });
  });
  </script>
 </body>
</html>

【问题讨论】:

  • 需要更好的格式,也许还有更好的措辞。我仍然不知道您要做什么,也不知道有什么问题。而且我不知道什么是“这个论坛”(是 StackOverflow 吗?)。
  • 实际上,我最初想将我从 php 文件收到的 json 数据附加到我的 HTML 表单中,并带有用户输入。我将我的代码放在 stackoverflow 论坛上以解决其他一些问题,并被告知我的代码受到“同源策略”的影响,这导致了打盹 json 数据的问题。所以你能不能看看我的代码是否受到这个政策的影响。如果是这样,我怎么能从那个政策问题中恢复过来。虽然我怀疑我的代码是否受到该政策的影响,因为我的两个文件都位于同一个域中。
  • 您遇到什么错误?您是否在控制台 (Ctr-J) 中看到任何消息?你确定你得到的 JSON 字符串包含有效的 JSON(根据jsonlint.com)吗?下一次,请不要使用“u”之类的“缩写”,而要使用“you”。此外,您应该编辑您的原始问题,而不是打开一个新问题。但是暂时不要考虑,重新格式化您的问题并缩进您的代码非常麻烦。作为记录,why JavaScript is not displaying parsed json data? 的副本
  • 如果我使用 eval() 来解析,那么现在在这个线程中编写的代码正在运行。但是,如果我使用 alert json.option[0] 即查看是否可以附加它,它不会输出任何内容。 &如果我使用 JSON.parse 进行解析,则所有原始代码中的第一个停止工作,即使用 json 填充 select 并引发错误“重要:在部署前从 json2.js 中删除此行”。是的,我检查使用 jsonlint.com 及其有效。对不起,其实我是用来节省空间的。实际上我在 OP 中也引用了该消息,我不确定是否也可以更改消息标题。
  • 该消息(“从 json2.js 中删除此行...”)本身就很清楚:在使用 json2.js 之前删除该行。你不是在链接那个库,是吗?

标签: php javascript jquery json same-origin-policy


【解决方案1】:

你在正确的轨道上,但在这里:$.each(jsonData, function (i, j) { ... } 你实际上是在循环遍历jsonData 字符串的每个字符,而不是json 对象。只需将$.each() 中的jsonData 更改为json,它应该可以正常工作(无论您使用的是eval 还是JSON.parse,但我推荐后者)。

已编辑:由于您使用的是jQuery.getJSON(),因此您不需要使用evalJSON.parse - jQuery 会为您完成。所以在你的回调函数中,只需设置 json = jsonData

<script>
  var json;
  $(document).ready(function() { 
      jQuery .getJSON("http://127.0.0.1/conn_mysql.php", function (jsonData) {
        json = jsonData;
        $.each(json, function (i, j) {
            document.index.user_spec.options[i] = new Option(j.options);
        });
      });
  });
</script>

【讨论】:

  • thanX 给你们俩。很抱歉,我的粗话让你感到困惑。实际上这部分不是我的问题,它工作正常。我在此处声明/使用 Global var json 只是能够在此处解析后在 ADDLISITEM 脚本中使用它。我在这里将json解析为javascript(即js),我需要在ADDLISTITEMS脚本中使用我改写我的原始帖子。请看。我在附加从 php 收到的 json 数据时遇到实际问题,即带有用户输入的“jsonData”
猜你喜欢
  • 2011-08-17
  • 2011-07-15
  • 2012-11-14
  • 2015-08-19
  • 2015-08-25
  • 2010-12-17
  • 1970-01-01
相关资源
最近更新 更多