мой код является жертвой той же политики происхождения? - PullRequest
0 голосов
/ 28 октября 2010

Вот мой код. Вы должны любезно посмотреть, страдает ли она «политикой того же происхождения» в этой форме. Домен для HTML: (http://127.0.0.1/jqload.html) & php file (http://127.0.0.1/conn_sql.php).) Это формат json: [{"options": "smart_exp"}, {"options": "user_int"}, {"options": "blahblah" }] Я на самом деле хочу добавить данные JSON, которые я получаю в HTYML с пользовательским вводом, и я страдаю от этого. Если я использую 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>

1 Ответ

0 голосов
/ 28 октября 2010

Вы на правильном пути, но здесь: $.each(jsonData, function (i, j) { ... } вы фактически просматриваете каждый символ строки jsonData, а не объект json.Просто измените jsonData на json внутри $.each(), и оно должно работать нормально (независимо от того, используете ли вы eval или JSON.parse, но я рекомендую последнее).

Отредактировано: поскольку вывы используете jQuery.getJSON(), вам не нужно использовать eval или JSON.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>
...