2015-08-22 2 views
1

У меня есть javascript, который должен передавать данные в переменную php. Я уже искал, как это реализовать, но я не могу заставить его работать правильно. Вот что я сделал:Передача данных переменной javascript в переменную php в том же php-файле

Javascript:

$(document).ready(function() { 

     $(".filter").click(function() { 
      var val = $(this).attr('data-rel'); 
      //check value 
      alert($(this).attr('data-rel')); 

      $.ajax({ 
       type: "POST", 
       url: 'signage.php', 
       data: "subDir=" + val, 
       success: function(data) 
       { 
        alert("success!"); 
       } 
      }); 
     }); 
    });  

Тогда на мой PHP тег:

<?php 
if(isset($_GET['subDir'])) 
{ 
    $subDir = $_GET['subDir']; 
    echo($subDir); 
} 
else 
{ 
    echo('fail'); 
}?>  

Я всегда получаю неудачу текст, так что должно быть что-то не так. Я только начал с php и jquery, я не знаю, что не так. Пожалуйста, мне нужна твоя помощь. Кстати, они находятся в том же файле, что и signage.php. Спасибо заранее!

ответ

1

Wh ru, вы отвечаете на звонок POST таким образом, вам нужно три вещей - прочитайте данные с _POST, положите их там правильно и ответьте в JSON.

$.ajax({ 
    type: "POST", 
    url: 'signage.php', 
    data: { 
     subDir: val, 
    } 
    success: function(answer) 
    { 
     alert("server said: " + answer.data); 
    } 
}); 

или также:

$.post(
    'signage.php', 
    { 
     subDir: val 
    }, 
    function(answer){ 
     alert("server said: " + answer.data); 
    } 
} 

Тогда в ответ:

<?php 
    if (array_key_exists('subDir', $_POST)) { 
     $subDir = $_POST['subDir']; 
     $answer = array(
      'data' => "You said, '{$subDir}'", 
     ); 
     header("Content-Type: application/json;charset=utf-8"); 
     print json_encode($answer); 
     exit(); 
    } 

Обратите внимание, что в ответ, вы должны установить Content-Type и вы должны послать действительный JSON, что обычно означает, что вам нужно немедленно выйти после отправки пакета JSON, чтобы не отправлять что-либо еще. Обратите внимание также, что использование isset является рискованным, потому что вы не можете отправить некоторые значения, которые эквивалентны unset (для например, логическое значение false или пустая строка). Если вы хотите проверить, что _POST на самом деле содержит ключ subDir, используйте явно array_key_exists (по той же причине в Javascript вы иногда используете hasOwnProperty).

Наконец, поскольку вы используйте один файл, вы должны учитывать, что при первом открытии файла _POST будет пустым, так что вы начнете с отображения «fail»!Вы уже начали ликвидацию этого с помощью _POST:

  • _POST означает, что это вызов AJAX
  • _GET означает, что это нормальное открытие signage.php

Так что вы могли бы сделать что-то как:

<?php // NO HTML BEFORE THIS POINT. NO OUTPUT AT ALL, ACTUALLY, 
     // OR $.post() WILL FAIL. 

if (!empty($_POST)) { 
    // AJAX call. Do whatever you want, but the script must not 
    // get out of this if() alive. 

    exit(); // Ensure it doesn't. 
} 
// Normal _GET opening of the page (i.e. we display HTML here). 

более прочном способ проверки проверяет статус XHR запроса с вспомогательной функции, такие как:

/** 
* isXHR. Answers the question, "Was I called through AJAX?". 
* @return boolean 
*/ 
function isXHR() { 
    $key = 'HTTP_X_REQUESTED_WITH'; 
    return array_key_exists($key, $_SERVER) 
     && ('xmlhttprequest' 
      == strtolower($_SERVER[$key]) 
      ) 
    ; 
} 

Теперь вы бы:

if (isXHR()) { 
    // Now you can use both $.post() or $.get() 

    exit(); 
} 

и на самом деле вы могли бы разгрузить ваш код AJAX в другой файл:

if (isXHR()) { 
    include('signage-ajax.php'); 
    exit(); 
} 
+0

Благодарим за ответ. Сначала попробую ваше предложение. –

1

Вы отправить данные с помощью метода POST и получение использует GET

<?php 
if(isset($_POST['subDir'])) 
{ 
    $subDir = $_POST['subDir']; 
    echo($subDir); 
} 
else 
{ 
    echo('fail'); 
}?>  
+0

Im пытается передать значение из моего AJAX вызова переменной PHP. Правильный ответ $ _POST или $ _GET? –

+0

Прочтите это для вашего ответа http://stackoverflow.com/questions/1872965/get-vs-post-in-ajax – Saty

+0

Ahh Я получил его, я меняю на $ _POST, но у меня все еще есть текст с ошибкой. Когда событие click было запущено, я получил правильные данные и предупреждает об успешности! но на моем теге php, он говорит, что я не понимаю. –

1

Вы использовали метод POST в AJAX, так что вы должны измениться, чтобы POST в PHP, а также.

<?php 
if(isset($_POST['subDir'])) 
{ 
    $subDir = $_POST['subDir']; 
    echo($subDir); 
} 
else 
{ 
    echo('fail'); 
}?> 
0

при использовании $_GET вы должны установить вам значение данных в вашем URL, я имею в виду

$.ajax({ 
      type: "POST", 
      url: 'signage.php?subDir=' + val, 
      data: "subDir=" + val, 
      success: function(data) 
      { 
       alert("success!"); 
      } 
}); 

или изменить на стороне сервера код из $_GET в $_POST

1

Редактировать ваш Javascript изменения кода POST для получения в ajax типа

$(document).ready(function() { 

    $(".filter").click(function() { 
     var val = $(this).attr('data-rel'); 
     //check value 
     alert($(this).attr('data-rel')); 

     $.ajax({ 
      type: "GET", 
      url: 'signage.php', 
      data: "subDir=" + val, 
      success: function(data) 
      { 
       alert("success!"); 
      } 
     }); 
    }); 
}); 
Смежные вопросы