Массив флажков в xmlhttprequest вместе с другими данными

#javascript #php #html #arrays #checkbox

#javascript #php #HTML #массивы #флажок

Вопрос:

Извините, если это вопрос о дублировании, но я искал и искал и, похоже, не могу найти никаких ответов. Я собираюсь сойти с ума от этой проблемы…

Я создаю форму веб-службы с использованием REST API / JSON, и все идет полным ходом, за исключением массива флажков. Если значения попадают в запрос xmlhttp open, вокруг массива ставятся двойные кавычки {checkboxvar:»[«Вариант один», «Вариант 2″]»}, превращающие его в строку. Он выдает ошибку приведения строки, потому что API ожидает массив.

Я не понимаю, как это сделать.. Большое спасибо всем, кто может мне в этом помочь!

У меня есть HTML-форма с некоторыми флажками:

 ... yada yada yada ....   

<div id="multipleSelect">
        <input type='checkbox' name='checkboxvar[]' value='Option One'>1<br>
        <input type='checkbox' name='checkboxvar[]' value='Option Two'>2<br>
        <input type='checkbox' name='checkboxvar[]' value='Option Three'>3
   </div>

    ... yada yada yada ....

<button id="createSubmit" onclick="createContact()">Create</button>
  

С помощью кнопки, которая ссылается на эту функцию Javascript:

 function createContact(){

  if (window.XMLHttpRequest)
    {// code for IE7 , Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 amp;amp; xmlhttp.status==200)
        {
            var response = JSON.parse(xmlhttp.responseText);
            if(response['status'] == "ok")
            {
        $('#createContact').fadeOut(800);
            }
            else if(response['status'] == "error")
            {
                alert(response['message']);
            }
            else
            {
                alert("Something REALLY went wrong. And to be honest I don't know what yet.");
            }
        }
    };

      xmlhttp.open("GET", "php/create.php?module=Contactsamp;data=First Name:" 
        document.getElementById('first_name').value  
      "|Middle Name:"   document.getElementById('middle_name').value  
      "|Last Name:"   document.getElementById('last_name').value, true);
      xmlhttp.send();
    }
  

Который затем отправляет запрос в этот PHP-файл:

 <?php

$module = $_GET['module'];
$dataurl = urldecode($_GET['data']);
$fields = explode("|",$dataurl);
$data = array();

for($i=0;$i<sizeof($fields);$i  )
{
    $field = explode(":",$fields[$i]);
    $data[$field[0]]=$field[1];
}
$data = '{"createFields": '.json_encode($data).',"returnFields":["Entity ID"]}';

if($module)
{
    $call   = $host."modules/".$module."/";
}
else
{
    $call   = $host."modules/"."noModule"."/";
}

echo $data;
$curl = curl_init($call);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Connection: Keep-Alive'));
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($curl, CURLOPT_USERPWD, $userName.":".$passKey);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$curl_response = curl_exec($curl);
echo $curl_response;
        ?>
  

Комментарии:

1. не пытайтесь вручную создавать json… это очень подвержено ошибкам, как вы обнаруживаете

2. Все это слишком сложно. Предлагаю вам изучить некоторые учебные пособия по формам ajax с использованием jQuery $.ajax и php

3. Это сложно, но этот «шаблон» для использования определенного API был передан мне соответствующей компанией API. Он использует дайджест-аутентификацию, которую я понятия не имею, как реализовать, поэтому я придерживался их методов. Это действительно отстой, но я пытаюсь заставить его работать.

4. часть cURL на самом деле не является слишком сложной… это ваш подход ajax и ручная обработка параметров запроса, а также ручное построение ответа

5. то же самое использование ajax-запроса $.ajax может быть выполнено в 3 строках и отправлять данные в кодировке формы, считываемые $_GET без создания собственного разделителя и его анализа