2012-04-20 3 views
0

У меня есть страница javascript, которая должна отправить имя пользователя, которое пользователь входит в php-скрипт на сервере. Страница javascript происходит от http://192.168.1.4/login.html и пытается получить доступ к php-скрипту по адресу http://192.168.1.4/GetInfo.php. Я думаю, что я не могу получить доступ к имени пользователя в скрипте php со страницы javascript из-за той же политики происхождения в firefox, однако я не уверен, как подтвердить это подозрение, поэтому, пожалуйста, простите меня, если я ошибаюсь. Я только начал изучать javscript и php. Мне было интересно, есть ли другой способ передать эту информацию. Код ниже. Благодаря!PHP, не получающий информацию от Javascript JQuery

Javascript:

<html> 
    <head> 
     <title>Login Page for SplitAuth</title> 
    </head> 
    <script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script> 
    <script language="Javascript"> 
     function getUsername() 
     { 
      var username = window.prompt('Please Type Your Username'); 
      var temp = document.getElementById('temp'); 
      temp.innerHTML = username; 
      jQuery.ajax(
       { 
        type: "POST", 
        url:"GetInfo.php", 
        data: username, 
        success: function(msg) 
          {alert("data Saved: "+msg);} 

       });//ends the jQuery send 

     }//ends the GetUsername function 
    </script> 
    <body onLoad=getUsername()> 
     <div id="temp">This will show text</div> 
    <body> 

</html> 

РНР скрипт:

<? 
$inFile="MyID.config.php"; 
$handle=fopen($inFile, 'r') or die ("No credentials could be gotten because the file MyID.config.php would not open."); 

echo $_POST['msg']; 

fclose($fh); 

?> 
+0

Что вы получите, если посетили http://192.168.1.4/GetInfo.php в своем браузере? – jimw

+0

- это скрипт php, который работает напрямую? –

+0

Поскольку javascript работает на стороне клиента, '192 ...' не будет работать, если на компьютере, на котором выполняется запрос ajax, находится сам сервер. Также 'data: username' неверно - должно быть' data: "username =" + username', я думаю - но тогда вы также не ссылаетесь на него в PHP. Ваш PHP-код не имеет смысла вообще ... трудно сказать, что вы пытаетесь сделать. –

ответ

3

Вы должны предварять ваше data: с "MSG =".

... 
data: "msg="+username, 
... 

и причина в том, что jQuery.ajax ожидает строку запроса или объект, который означает, что

... 
data: {msg: username}, 
... 

также будет работать.

Взгляните на jQuery.ajax Documentation. В частности, data-раздел

+0

Спасибо! Это сработало, но я хочу что-то прояснить. Я думал, что Javascript должен был быть достаточно умным, чтобы знать, когда переменная является строкой, и когда это не так, я думал, что переменная, которая была строкой (или так, как я думал), была достаточно хороша. – tpar44

+0

Недостаточно, чтобы это была строка, она должна быть строкой запроса. И конкретно строка запроса с ключом 'msg' и содержимым' username' в качестве значения. Причина, по которой ключ должен быть 'msg', заключается в том, что ваш PHP-код использует этот ключ. – Kleist

+2

Вы правы, что javascript свободно набирается и, как правило, берет на себя подразумеваемые типы данных значениями, которые вы назначаете переменной, но в этом случае речь идет не о том, какой тип данных имеет переменная - это о том, что сервер ожидает получить , если вы хотите немного более подробно, вы можете прочитать о querystrings здесь: http://en.wikipedia.org/wiki/Query_string – jammypeach

0

Вы используете метод POST и данные, которые вы отправляете, являются неправильными. Вам нужно собрать данные для отправки. Взгляните на страницу jquery в методе ajax. Это то, что он говорит для атрибута данных.

http://api.jquery.com/jQuery.ajax/

данные для отправки на сервер. Он преобразуется в строку запроса, если не является уже строкой. Он добавляется к URL-адресу для запросов GET. См. Параметр processData для предотвращения этой автоматической обработки. Объектом должны быть пары «ключ/значение». Если значение является массивом, jQuery сериализует несколько значений одним и тем же ключом на основе значения традиционной настройки (описано ниже).

+0

мог бы по крайней мере опубликовать ссылку ... – jammypeach

-1

Ваш сценарий должен выглядеть следующим образом.

$.ajax({ 
    type: "POST", 
    url: "GetInfo.php", 
    data: "{name:"+ username + "}" 
    }).done(function(msg) { 
alert("Data Saved: " + msg); 
}); 

И ваш php-скрипт не получает значение имени пользователя. «Msg», используемый в вашем $ _POST ['msg'], ничего не будет предупреждать, поскольку он не имеет никакого значения. «Msg» varaible предназначен для хранения значения возвращаемого значения на вашей странице html. Я порекомендую вам прочитать больше от www.jquery.com

+0

минус обратные записи я предполагаю? – jammypeach

+0

на самом деле ждать mo, значение для 'data' в вызове ajax выглядит неправильно для меня. это строка, а не объект. не думаю, что это сработает. – jammypeach

+0

@jammypeach, backticks не является частью скрипта. И единственным объектом, который необходим в приведенном выше скрипте, является имя пользователя, маска может быть передана как строка. По другой мысли, «$ .Ajax» не для размещения формы, вы должны использовать «$ .Post». – Peter

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