2015-06-06 5 views
1

Да, есть много вопросов к подобным вещам, но я не могу понять это, извините.Передать переменную javascript во внешний файл php

У меня есть файл с некоторыми javascript-переменными, в зависимости от ввода пользователем (но без формы) и нормальной HTML-ссылки на мой php-файл.

<script> 
function doStuff() { 

    var a = 'foo'; 
    var b = 'bar'; 

    window.location = 'newfile.php?a=' + a + '&b=' + b; 
} 
</script> 

<a href="javascript:doStuff()">go to new php file</a> 

Это прекрасно работает, я могу получить доступ к данным в newfile.php с $_GET.

newfile.php:

<?php 
$a= $_GET['a']; 
$b= $_GET['b']; 
echo($a,$b); // works 
?> 

Но я хотел бы использовать POST. Думаю, я должен использовать ajax для этого, но как именно? JQuery включен кстати, так что я мог бы использовать $.ajax()

Любая помощь высоко ценится :)

EDIT:

Спасибо за быстрый ребята ответа! Разбор JSON не работает, я не могу понять, почему - после нажатия на кнопку окно браузера исчезает в течение секунды секунды, и я снова на той же странице, что сейчас не отвечает :(

Я пошел со следующим кодом:

jQuery.post('newfile.php',{'a': a, 'b': b}); //curious: with or without ''? 
setTimeout(function() { 
    window.location = 'newfile.php'; 
    }, 5000); //this will redirct to somefile.php after 5 seconds 

newfile.php:

$a= $_POST['a']; 
$b= $_POST['b']; 

echo('Testing: '.$a); 

Сразу после нажатия я могу увидеть правильный выход в Firebug (Testing: Foo), но, конечно, после того, как перенаправлять на участок, значения теряются, и я остаюсь с «Testing:»

Что мне делать?

+0

Добро пожаловать в StackOverflow, если вы обнаружите какие-либо из ответа будет решить вашу проблему, отметьте один принятый путем проверки зеленой галочки на левой стороне ответ. – Viral

ответ

1

Вы можете использовать ajax для достижения этого. Ниже приведен код, который работает при нажатии кнопки или нажатии кнопки привязки.

HTML

<button type="button" id="button1">Click me </button> 

Ajax

$('#button1').click(function() { 
var a = $('#IDofYourFormelement').val(); 
var b = $('#IDofYourFormSecondElement').val(); 

$.post('/somefile.php', {'somevariable': a, 'variableB': b}, function(data) { 
    var parsed = JSON.parse(data); 
    if (parsed == 'success') { 
     setTimeout(function() { 
     window.location = '/somefile.php'; 
     }, 3000);//this will redirct to somefile.php after 3 seconds 
    } 
    else 
    { 
     alert ('Invalid details'); 
    } 
}); 
}); 

, а затем в вашем somefile.php вы можете получить доступ к нему, как

$a = $_POST['somevariable']; 
$b = $_POST['variableB']; 
//do some stuff and return json_encoded success/failure message 
0

Я предполагаю, что вы выкладываете переменные с помощью JavaScript и отобразите сообщение страницы, в котором будут выполняться ваши переменные сообщения. Нашел аналогичный вопрос и ответ здесь - JavaScript post request like a form submit.

EDIT

window.location будет вызывать другой экземпляр вами страницы, а затем будет назначить или заменить текущий документ, следовательно, ваши предыдущие параметры разместить потеряны. Если вы хотите, чтобы страница с вашими параметрами сообщения прошла, вам необходимо отправить форму на вашу php-страницу с помощью method=POST также с параметрами сообщения. Это то, что написано в вышеупомянутой ссылке stackoverflow, которую я поделил.

+0

Хорошо, если мне нужно создать форму динамически, тогда я просто опишу свое решение $ _GET, которое я описал сначала. Спасибо за ссылку в любом случае. – user2370903

0

Вы можете использовать новое с HTML5 FormData(); Фрагмент кода из https://developer.mozilla.org/en-US/docs/Web/Guide/Using_FormData_Objects смотри также https://developer.mozilla.org/en/docs/Web/API/FormData и http://caniuse.com/#feat=xhr2 для поддержки браузера

var formData = new FormData(); 

formData.append("username", "Groucho"); 
formData.append("accountnum", 123456); // number 123456 is immediately converted to string "123456" 

var request = new XMLHttpRequest(); 
request.open("POST", "http://foo.com/submitform.php"); 
request.send(formData); 
Смежные вопросы