2016-01-19 4 views
3

У меня есть html-файл на моем localhost с формой и jquery/ajax, который обрабатывает данные сообщения. Простой PHP скрипт просматривает данные в таблице базы данных MySQLКак разрешить совместное использование ресурсов на XAMPP?

Это основная часть:

// $.post('lookup_update.php', $(this).serialize()) //<- local part which works 
    $.post('http://www.example.com/projectX/lookup_update.php', $(this).serialize()).done(function (data) 
          { etc. 

Но когда я указываю на онлайн lookup_update.php я получаю следующее сообщение об ошибке в хроме

XMLHttpRequest не может загрузить http://www.example.com/projectX/lookup_update.php. В запрошенном ресурсе нет заголовка «Access-Control-Allow-Origin». Следовательно, исходный «http://localhost» не допускается. Ответ был HTTP код статуса 404.

Как я понимаю, мне нужно использовать

header("Access-Control-Allow-Origin: *"); 

для PHP. Но когда я добавляю это в example.com/lookup_update.php, файл дает 404, когда файл localhost пытается его вызвать.

Я также попытался добавить следующее к моей XAMPP Apache конфигурационный файл

Header set Access-Control-Allow-Origin "*" 

Как правильно включить кросс-происхождения ресурс из моей локальной установки XAMPP ??

[EDIT] Это моя простая форма на моем локальном хосте

<!--Begin form--> 
    <div id="form" class="result"> 
     <form method="post" id="reg-form" class="form-horizontal"> 
      <div class="controls"> 
       <input type="text" name="code" id="code" placeholder="Code" class="form-control input-lg" />  
      </div> 
     </form> 
    </div> 
    <!--End form--> 

С помощью следующей формы кода JQuery

<script type="text/javascript"> 
      $(document).ready(function() 
      { 
       $(document).on('submit', '#reg-form', function() 
       { 
        var tmpCode = $("#code").val(); 

//     $.post('lookup_update.php', $(this).serialize()) 
         $.post('http://www.example.com/projectX/lookup_update.php', $(this).serialize()) 
          .done(function (data) 
          { 

           $("#reg-form").fadeOut('slow', function() 
           { 
            $(".result").fadeIn('slow', function() 
            { 
             console.log("inner test " + tmpCode); 
             $(".result").html(data); 


             setTimeout(function() { 
              location.reload(); 
              $('input').val(""); 
             }, 3000); 


            }); 
           }); 
          }) 
          .fail(function() 
          { 
           alert('fail to submit the data'); 
          }); 
        return false; 
       }); 


      }); 

     </script> 

[EDIT 2]

OK, я не думаю, что это связано с онлайн-файлом lookup_update.php, так как я я ИНГ это проверить в другом файле

  var testXHR = $.post("http://www.example.com/projectX/lookup_update.php", function (data) { 
      alert("success:" + data); 
     }) 

И в предупредительного всплывающем окне я вижу ожидаемые данные

+0

URL-адреса в вопросе довольно запутанны. Это 'http: // www.example.com/projectX/lookup_update.php'' example.com/lookup_update.php', или 'http: // www.example.com/projectX/index.php'? –

+0

@AlexBlex Я имел в виду тот же файл, который я переименовал index.php в lookup_update.php. Этот файл находится в сети и который я вызываю локально. – alex

+0

Не могли бы вы обновить вопрос с правильными именами файлов, фрагментом кода, в который вы добавляете 'header', и вывод команды' curl -v http: // www.example.com/_correct_url_here -o/dev/null' –

ответ

3

Вы должны написать ниже код в начале вашего lookup_update.php

header('Access-Control-Allow-Origin: *'); 
header('Content-type: application/json'); 

Вместо * вы можете написать только адрес Ip.

ИЛИ

Сначала вы должны проверить, где проблема либо на локальном хосте или другом сервере.

Попробуйте этот код: Если вы получаете некоторые данные в оповещении, тогда проблема находится на localhost else на другом сервере.

$.post("test.php", function(data) { 
alert("Data Loaded: " + data); 
}); 
+0

звучит многообещающе, но поскольку я звоню с моего localhost, должен ли я использовать IP-адрес моего текущего местоположения? Я имею в виду, когда я забираю свой компьютер в другое место, я получаю другие IP-адреса, правильно? О кстати, что меня удивляет, когда я google «мой текущий ip», я получаю 2001: 980: cb55: 1: xxx: xxxx :: 25c9 - это IP-адрес на компьютер и могу ли я использовать его? OH, оставив под скалой это IPv6, а не старый добрый xxx.xxx.xxx.xx ??? – alex

+0

Если вы получаете данные с разных серверов, вы можете использовать IP-адрес. На локальном хосте нет необходимости. – Monty

+0

Я попробовал 'header (« Access-Control-Allow-Origin: 2001: 980: xxxx: 1: ec29: xxxx: fe4c: 25c9 »);' в начале моего example.com/projectX/lookup_update.php, но все же Я получаю предупреждение – alex

0

CORS запросы "закреплены" с предполетной запросов.

MDN говорит об этом here

Кроме того, для методов запроса HTTP, которые могут вызвать побочные эффекты на пользовательских данных (в частности, для других, чем GET, или для использования POST с определенными типами MIME методов HTTP) , спецификация требует, чтобы браузеры «предваряли» запрос, запрашивали поддерживаемые методы с сервера с помощью метода запросов HTTP OPTIONS, а затем после «утверждения» с сервера отправляли фактический запрос с использованием метода HTTP-запроса

Это только предположение, но вы, вероятно, используя фреймворк, и вы забыли включить (реализовать) маршрут OPTIONS для ваших запросов.

Стоит отметить, что вы не должны использовать заголовок подстановки (позволяющий любому сайту использовать CORS), вы должны указать белый список.

Другим заголовком, который вы должны отправлять, является метод запроса.

Access-Control-Request-Method: POST 

Надеюсь, это поможет.

+0

Нет, не используя фреймворк. Просто простая форма ввода 1 и javscript jQuery для отправки и обработки ответа. – alex

+1

В этом случае дважды проверьте свою маршрутизацию. ваш сценарий вообще. Я также отредактировал ответ, в котором упоминается другой заголовок, который нужно отправить. В любом случае, дайте этой статье MDN некоторые чтения, чтобы получить более широкую перспективу в этой проблеме. – Slytherin

+0

ah Я вижу l ookup_update.php действительно использует фреймворк (Wordpress) – alex

Смежные вопросы