2015-05-05 4 views
4

Я как бы делаю беспорядок теперь с моим кодом, обычно я делаю скрипт PHP-AJAX и передаю одну переменную обратно в JS-скрипт с json_encode. На этот раз я хотел бы передать несколько переменных с помощью json_encode, к сожалению, я не знаю, как разделить значение в JS.Передача нескольких переменных через json_encode

Мой JS код:

$('#submit').click(function(){ 

    // Storing the value into variables 
    var content_page = $('#content-page').val(); 
    var content_url = 'action=saving&page='+content_page; 

     // Starting the AJAX post form 
     $.ajax({ 
       type: 'POST', 
       url: 'handlers/content.handler.php', 
       data: content_url, 
       success: function(responseText) 
       { 
        $.parseJSON(responseText); // Making the return value of the PHP handler reedable 

        alert(responseText.pageid) 

         if(responseText.indexOf(1) > -1) 
         { 
          noty({ text: 'U heeft geen pagina gekozen om te bewerken!' }); 
         } 
         else if(responseText.indexOf(2) > -1) 
         { 
          noty({ text: 'U heeft geen geldige pagina gekozen!' }); 
         } 
         else if(reponseText.indexOf(100) > -1) 
         { 
          noty({ text: 'Pagina is opgehaald' }); 
         } 
       } 
      }); 
    return false; 
}); 

Мой PHP код:

<?php 
/* Dit bestand handeld gegevens af voor het bestand content in de map panel. Gegevens komen hier door heen via een JS bestand(content.handler.js...) en worden ook weer terug gestuurd. */ 
include_once '../includes/config.php'; 

    // Controleren of server contact maakt en geen persoon. 
    if(isset($_POST['action']) && $_POST['action'] == 'saving') 
    { 
     $stringPage = trim($_POST['page']); 
     $error = array(); 
     $bolean = false; 

      # Prepared statement. 
      $stmt = $mysqli->prepare('SELECT id,name,title,text FROM pages WHERE name = ?'); 
      $stmt->bind_param('s', $stringPage); 
      $stmt->execute(); 
      $stmt->store_result(); 
      $stmt->bind_result($pageID, $pageName, $pageTitle, $pageText); 
      $stmt->fetch(); 
      $intPage = $stmt->num_rows(); 
      $stmt->close(); 

    /* Controle */ 
     if(empty($stringPage)) 
     { 
      $error[] = 1; 
      $bolean = true; 
     } 
     if($intPage == 0) 
     { 
      $error[] = 2; 
      $bolean = true; 
     } 

      if($bolean == false) 
      { 
       $error[] = 100; 

      } 


      header('Content-Type: application/json'); 
      $array = array($error, $pageID, $pageName, $pageTitle, $pageText); 
      echo json_encode($array, JSON_FORCE_OBJECT); 
    } 
?> 

Таким образом, все значение возвращается только в порядке, так что нет никаких проблем с этим. Моя проблема в том, что я помещал все, что я хотел в массив (не лучшее решение), и не знаю, как отделяться в JS. Я предлагаю, что это будет что-то вроде response.pageid, но это не сработало.

Заранее благодарим за это, и извинения за плохую грамматику.

ответ

5

Сначала необходимо разобрать JSON и назначить объектную переменную. Думаю, это единственный шаг, который вы пропустили.

Кроме того, возврат json-кодированного массива в порядке. Я делаю это все время. Вы можете добавить такие вещи, как «статус = успех» и «errormessage = someerror», поэтому он очень полезен.

var obj = $.parseJSON(response); 

Так что в вашем случае, у вас есть значения в массиве в PHP .. так что давайте скажем, к примеру ... то

$myarray['fullname'] = 'john doe'; 
$myarray['userid'] = 777; 
$myarray['isadmin'] = false; 
$myarray['email'] = [email protected]; 

ваш Ajax скрипт отправляет ответ на Javascript .. .

echo json_encode($myarray); 

javascript получает его в вашей функции успеха ajax ...

success: function (data) { 
    var responsedata = $.parseJSON(data); 

    alert('Fullname: '+responsedata.fullname+' userid: '+responsedata.userid+' isadmin: '+responsedata.isadmin); //etc etc 

} 

ОТ ЧАТ

Я посмотрел на свой код на пастообразной бен

использовать это, чтобы увидеть ответ BTW

console.dir(responsetext); //instead of alert 

или попробовать Firefox сделать

alert(responsetext.toSource()); 

responsetext себе является объектом и привычка оповещения ничего

мозговым текста ответа, как массив, как в PHP, но вместо того, чтобы использовать myarray['somekey'] вы myobj.somekey

изменить ваши задания ошибок в

error[1] , error[2], error[100] 

вместо error[]

Вы передаете ему ошибку, так что это массив, к которому вы можете получить доступ с помощью indexOf(), как вы делали, или вы можете использовать textresponse.error[1]

но ваша проблема ключи для массива ошибок просто быть назначены как 0, 1, 2 и т.д ..

но вы пытаетесь назвать их как 1 , 2,100 ...

поэтому, добавив эти цифры вместо того, чтобы просто использовать error[], он найдет правильное значение при проверке ответа на ошибку.

+0

Благодарим вас за быстрое реагирование. Я уже использую параметр parseJSON сразу после объявления моей функции успеха. Но я попробую ваш вариант сначала назначить его как переменную. Еще раз спасибо! – RezaM

+1

Нет проблем. Я делаю это все время, и вы должны назначить его переменной, вы даже можете использовать responseetext, как и responseetext = $ .parseJSON (responsetext); –

+1

Если это не сработает для вас, может возникнуть большая проблема, поэтому оставляйте здесь комментарий, если он не работает, поэтому я могу попытаться помочь вам выяснить, что еще может быть причиной вашей проблемы. Благодарю. :) –

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