2012-05-10 7 views
1

Я пытаюсь установить переменную $ id = $ _ GET ["categoryID"]. Я не могу заставить его работать. Я считаю, что это связано с запросом Ajax. Но я не знаю, как мне отформатировать его, чтобы он работал вместе с этим запросом. Мне нужна переменная для запроса mysql. Любая помощь приветствуется. Это над моей головой и боролось с ней в течение нескольких дней. Я пробовал как GET, так и POST. Благодарю.

Я дистиллированная страницу вниз к этому ...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Test $_GET</title> 
</head> 
<body> 
<?php 
     if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 

     $id = $_GET["categoryID"]; 
     //$id=3; 
     } 
?> 
    print_r($_GET) = <?php print_r($_GET); ?> 
    <br /> 
    print_r($id) = <?php print_r($id); ?> 
</body> 
</html> 

Вот результирующая страница ....

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Test $_GET</title> 
    </head> 
    <body> 
      print_r($_GET) = Array 
(
    [categoryID] => 1001 
) 
     <br /> 
     print_r($id) = 
    </body> 
    </html> 

Вот вся страница ....

<?php 
if (@$_REQUEST['ajax']) { 
    $link = $nm33; 
    if ($link == false) 
     trigger_error('Connect failed - ' . mysql_error(), E_USER_ERROR); 
    $connected = mysql_select_db('nm', $link); 
    if ($connected) { 

    //How do I set $id = $_GET["categoryID"] It fails to set the variable. 

     $id =$_GET["categoryID"]; 
    // $id=1; 
    // It will work as $id=1  

     $results = mysql_query('select * from selectMenu where categoryID= \'' . $id . '\' AND category="' . strtolower(mysql_real_escape_string(strip_tags($_REQUEST['category']))) . '"'); 

    ////////// 


     $json = array(); 
     while (is_resource($results) && $row = mysql_fetch_object($results)) { 
      //$json[] = '{"id" : "' . $row->id . '", "label" : "' . $row->label . '"}'; 
      $json[] = '"' . $row->label . '"'; 
     } 
     echo '[' . implode(',', $json) . ']'; 
     die(); // filthy exit, but does fine for our example. 
    } else { 
     user_error("Failed to select the database"); 
    } 
} 
?> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script src="js/select-chain.js" type="text/javascript" charset="utf-8"></script> 
<script type="text/javascript"> 
    <!-- 
    $(function() { 
     var cat = $('#categorySelect'); 
     var el = $('#elementSelect'); 
     var attr = $('#attributeSelect'); 

     el.selectChain({ 
      target: attr, 
      url: 'select-menu.php', 
      data: { ajax: true, anotherval: "anotherAction" }    
     });   

     // note that we're assigning in reverse order 
     // to allow the chaining change trigger to work 
     cat.selectChain({ 
      target: el, 
      url: 'select-menu.php', 
      data: { ajax: true } 
     }).trigger('change'); 

    }); 
    //--> 
    </script> 
<link href="selectMenu.css" rel="stylesheet" type="text/css" /> 
<form action="performance-models.php" method="get"> 
    <select name="category" class="dropdown" id="categorySelect"> 
    <option selected="selected">Select Your Vehicle</option> 
    <?php do { ?> 
    <option> <?php echo $row_rsMake['make']; ?></option> 
    <?php } while ($row_rsMake = mysql_fetch_assoc($rsMake)); ?> 
    </select> 
    <select name="model" class="dropdown" id="elementSelect"> 
    <option selected="selected">Select Model</option> 
    <option>[none selected]</option> 
    </select> 
    <select name="appYear" class="dropdown" id="attributeSelect" > 
    <option selected="selected"> </option> 
    <option>[none selected]</option> 
    </select> 
    <input type="submit" value="Go"> 
</form> 
<p><br /> 
    <br /> 
    print_r($_GET) = <?php print_r($_GET); ?> <br /> 
    print_r($_REQUEST) = <?php print_r($_REQUEST); ?><br /> 
    echo $_REQUEST['categoryID'] <?php echo $_REQUEST['categoryID'];?> 
</p> 

Здесь выберете-chain.js

(function ($) { 
    $.fn.selectChain = function (options) { 
     var defaults = { 
      key: "id", 
      value: "label" 
     }; 

       var settings = $.extend({}, defaults, options); 

     if (!(settings.target instanceof $)) settings.target = $(settings.target); 

     return this.each(function() { 
      var $$ = $(this); 

      $$.change(function() { 
       var data = null; 
       if (typeof settings.data == 'string') { 
        data = settings.data + '&' + this.name + '=' + $$.val(); 
       } else if (typeof settings.data == 'object') { 
        data = settings.data; 
        data['category'] = $$.val(); 
        data['model'] = $$.val(); 
        data['year'] = $$.val(); 
       } 

       settings.target.empty(); 

       $.ajax({ 
        url: settings.url, 
        data: data, 
        type: (settings.type || 'get'), 
        dataType: 'json', 
        success: function (j) { 
         var options = [], i = 0, o = null; 

         for (i = 0; i < j.length; i++) { 
          // required to get around IE bug (http://support.microsoft.com/?scid=kb%3Ben-us%3B276228) 
          o = document.createElement("OPTION"); 
          o.value = typeof j[i] == 'object' ? j[i][settings.key] : j[i]; 
          o.text = typeof j[i] == 'object' ? j[i][settings.value] : j[i]; 
          settings.target.get(0).options[i] = o; 
         } 

      // hand control back to browser for a moment 
      setTimeout(function() { 
       settings.target 
           .find('option:first') 
           .attr('selected', 'selected') 
           .parent('select') 
           .trigger('change'); 
      }, 0); 
        }, 
        error: function (xhr, desc, er) { 
         // add whatever debug you want here. 
      alert("an error occurred here"); 
        } 
       }); 
      }); 
     }); 
    }; 
})(jQuery); 
+2

Где запрос AJAX тогда? – Jivings

+0

Без запроса AJAX мы мало что можем сделать, чтобы помочь. –

+0

Это не сработает с этим ... if (isset ($ _ SERVER ['HTTP_X_REQUESTED_WITH']) && strtolower ($ _ SERVER ['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {. Я предполагаю, что есть способ использовать $ _GET для установки переменной $ id? – John

ответ

2

Параметр A $_GET передается по URL-адресу, поэтому для этого;

http://www.google.com/?q=search

Параметр $_GET['q'] будет равен 'search'

Итак, когда вы выполняете ваш запрос AJAX необходимо указать параметры в URL.

EDIT:

Попробуйте избавиться от ваших HTTP_X_REQUESTED_WITH заявлений. Запрос, вероятно, достаточно безопасен без таких проверок. Просто упростить его:

if (isset($_GET["categoryID"])) { 
    $id = $_GET["categoryID"]; 
} 
+0

есть. www.mydomain.com/testGET.php?categoryID=3 - это то, что я использую, и он не работает. – John

+0

@ Джон. Ну, вам действительно нужно показать запрос AJAX. – Jivings

+0

Хорошо, хочу сказать спасибо, но я не понимаю. Мне просто нужно передать запрос URL-адреса $ _GET переменной $ id, чтобы использовать его в запросе для начального меню выбора. Я просто не понимаю все это. Все отлично работает, если я устанавливаю $ id = 3. Это сложный способ просто передать mydomain.com/selectModels.php?categoryID=3. Я делаю это каждый день с PHP. Я провел два дня, пытаясь решить что-то, чего я, очевидно, не понимаю. Я предполагаю, что мой выбор будет состоять в том, чтобы остановиться и начать с самого начала изучать Ajax/JQuery. В любом случае, спасибо всем, кто пытался помочь. – John

0

С JQuery вы можете использовать jQuery.get() или добавить параметр type='GET' в jQuery.ajax(). Некоторые примеры:

jQuery(function($) { 
    $.ajax({ 
     url : 'your-page.php', 
     type : 'GET', 
     data : { 
      'paramName' => 'paramValue', 
      'foo' => 'bar' 
     }, 
     success : function(data) { 
      // do something in the callback function 
     } 
    }); 
}); 
+0

Как это использовать на странице, которую я опубликовал? – John

+0

@John - это запрос JQuery AJAX. Отредактируйте данные и URL-адрес и добавьте функцию успеха и замените ее на запрос AJAX. –

+0

Хорошо, хочу сказать спасибо, но я не понимаю. Мне просто нужно передать запрос URL-адреса $ _GET переменной $ id, чтобы использовать его в запросе для начального меню выбора. Я просто не понимаю все это. Все отлично работает, если я устанавливаю $ id = 3. Это сложный способ просто передать mydomain.com/selectModels.php?categoryID=3. Я делаю это каждый день с PHP. Я провел два дня, пытаясь решить что-то, чего я, очевидно, не понимаю. Я предполагаю, что мой выбор будет состоять в том, чтобы остановиться и начать с самого начала изучать Ajax/JQuery. В любом случае, спасибо всем, кто пытался помочь. – John

0

Вам нужно передать значение в jQuery.get():

$.get('yourphppage.php', { categoryID : 1234 }, function(data) { 
    alert(data); 
}); 

В РНР просто эхо обратно свой cateogryId, чтобы увидеть, если он работает

<?php echo $_GET['categorID'] ?> 
1

Там не требуется:

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 

Вы можете просто использовать:

$id = isset($_GET["categoryID"]) ? intval($_GET["categoryID"]) : 0; 

который так же, как (но короче ...):

if (isset($_GET["categoryID"])) 
{ 
    $id = intval($_GET["categoryID"]); 
} 
else 
{ 
    $id = 0; 
} 

Если вы хотите проверить, если запрос был сделан с помощью AJAX, вы бы переписать сценарий, так как весь раздел header не понадобится.Вместо этого вы можете вызвать этот скрипт со своей страницы, установить переменную в самой странице и если эта переменная не установлена ​​в скрипте, это вызов ajax. Очевидно, это просто простой пример.

Edit: Плагин не упоминает, что по умолчанию тип запроса есть, но это вполне может быть POST так что вы могли бы попытаться добавить type: "post" к опционам selectChain.

И чтобы убедиться, что ваш ответ хорошо сформированный JSON (когда вы там ...) Я также рекомендовал бы использовать json_encode, так:

echo json_encode($json); 
    die(); // filthy exit, but does fine for our example. 

Edit 2: Я просто заметил Еще одна проблема: Нигде categoryID добавляются в раздел данных в AJAX:

  • Вы запрашиваете/проводку к (???): (! извещения, нет строки запроса) select-menu.php
  • Данные, которые вы отправляете это: { ajax: true, anotherval: "anotherAction" } или { ajax: true}

Таким образом, нет никакого способа, которым categoryID никогда не собирается показать в select-menu.php.

Наиболее логичным, что нужно сделать, можно было бы добавить в выбранную категорию в разделе данных:

data: { "ajax": true, "anotherval": "anotherAction", "categoryID": cat } 

и:

data: { "ajax": true, "categoryID": cat } 
+0

Наверное, лучше не вводить тройных операторов в полный новичок. – Jivings

+0

@ Jivings Хмммм, я добавлю объяснение ... – jeroen

+0

Хорошо, хочу сказать спасибо, но я этого не понимаю. Мне просто нужно передать запрос URL-адреса $ _GET переменной $ id, чтобы использовать его в запросе для начального меню выбора. Я просто не понимаю все это. Все отлично работает, если я устанавливаю $ id = 3. Это сложный способ просто передать mydomain.com/selectModels.php?categoryID=3. Я делаю это каждый день с PHP. Я провел два дня, пытаясь решить что-то, чего я, очевидно, не понимаю. Я предполагаю, что мой выбор будет состоять в том, чтобы остановиться и начать с самого начала изучать Ajax/JQuery. В любом случае, спасибо всем, кто пытался помочь. – John