2015-06-18 4 views
1

Я новичок в PHP и никогда не использовал Ajax, поэтому надеюсь, что кто-то может мне помочь.jQuery/Ajax: как передать переменную JS определенной функции PHP

У меня есть отдельный файл functions.js , в котором хранятся все JS, которые я использую для страниц веб-сайта.
До сих пор все обмены с db выполнялись с помощью PHP непосредственно на страницах, которые отлично работают до сих пор, но теперь у меня есть сценарий, где мне нужно инициировать это из JS-файла.

Я думал, что могу создать отдельный PHP-файл (ajax.php), который содержит функции только для таких целей, а затем передает данные через Ajax из JS-файла в этот PHP-файл.

До сих пор у меня есть следующее, но поскольку в файле ajax.php есть несколько функций, я не уверен, как передать это конкретной функции, в которой я нуждаюсь. Кроме того, я не уверен, правильно ли установлен Ajax-вызов.

Может ли кто-нибудь помочь мне с этим и, возможно, также объяснить ваш ответ в нескольких словах? В принципе, здесь я хочу передать переменную JS «itemID» функции PHP fetchTransMain, где это должно использоваться для переменной $itemID (переменная $ trans генерируется в PHP).

Обновление: Мне также нужно знать, как получить результат от функции PHP в JS. Я еще не нашел подхода для этого, возможно, с помощью Ajax GET?

Что я имею в моем functions.js файле:

var itemID = "someID"; 

$.ajax({ 
    url: "ajax.php", 
    type: "post", 
    cache: "false", 
    data: itemID, 
    success: function(){ 
     alert("success"); 
    }, 
    error: function(){ 
     alert("failure"); 
    } 
}); 

... и на моем ajax.php файле:

function fetchTransMain($trans, $itemID){ 
    foreach($trans as $key => $val){ 
     if($val["ID"] == $itemID){ 
      echo $val["trans"]; 
     } 
    } 
} 

Большое спасибо заранее, Mike

+1

Вы должны искать '$ _POST [«данные»] ', чтобы привести в переданных данных – briansol

+0

Обычно я отделить PHP функцию, один на один файл. Но вы могли бы отправить что-то в своих данных (имя функции) и проверить его на PHP, чтобы решить, какую функцию выполнить. –

+0

@briansol: Спасибо за это! – keewee279

ответ

5

Вы должны определить данные как объект:

$.ajax({ 
    url: "ajax.php", 
    type: "post", 
    cache: "false", 
    data: {itemId: itemID}, 
    success: function(data) { 
     console.log(data); 
     alert("success"); 
    }, 
    error: function(){ 
     alert("failure"); 
    } 
}); 

И потом:

$itemId = $_POST['itemId']; 
function fetchTransMain($trans, $itemID){ 
    foreach($trans as $key => $val){ 
     if($val["ID"] == $itemID){ 
      echo $val["trans"]; 
     } 
    } 
} 
+0

Это замечательно - большое спасибо! Как получить результат от PHP в JS? То же самое, что и вместо «пост»? – keewee279

+1

проверить мое редактирование. в вашей функции успеха вы получаете в качестве первого параметра ответ своего php. Если вы хотите отправить несколько значений обратно в js, проверьте функцию json_encode в php.net – taxicala

+1

Это идеальное решение - еще раз спасибо! Примите, как только смогу. :) – keewee279

3

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

Первая часть почти правильно:

$.ajax({ 
     url: "ajax.php", 
     type: "post", 
     cache: "false", 
     data: {valueName: itemID}, 
     success: function(){ 
      alert("success"); 
     }, 
     error: function(){ 
      alert("failure"); 
     } 
    }); 

Просто платить attantion параметру данных, вы должны передать объект там с именем. Это имя - это имя, которое вы будете использовать на PHP для получения значения.

Тогда на стороне сервера:

function fetchTransMain($trans, $itemID){ 
    foreach($trans as $key => $val){ 
     if($val["ID"] == $itemID){ 
      echo $val["trans"]; 
     } 
    } 
} 

$valueFromClient = $_POST['valueName']; 
fetchTransMain($trans, $valueFromClient); 

Здесь вы должны использовать $ _POST, так как у нас есть выбор типа: «пост» на стороне клиента.

Надеется, что это помогает

+0

Большое спасибо - объяснения действительно хороши. Это похоже на то, что предложил таксика, и он был немного раньше, поэтому я согласен с его ответом, но проголосовал за вас, и объяснения определенно помогли - ЛЕТ. :) – keewee279

+0

Спасибо в любом случае за ваш взнос: D – wezzy

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