POST и Get в одном запросе Ajax - PullRequest
3 голосов
/ 11 августа 2009

Я использую сообщение ajax в моем приложении, как

 $.ajax({
     type: "POST",
    url: "http://localhost/FormBuilder/index.php/forms/saveForm/"+user_id,

    data: "formname="+formname+"&status="+status,
     success: function(msg){
     // alert( "Data Saved: " + msg);
                }//success
 });//ajax

В приведенном выше сообщении ajax я сохраняю форму с идентификатором пользователя

Могу ли я получить идентификатор формы, которую я сохранил в запросе Ajax. Если да, то как?

Я пытался с Ajax получить отдельно. Но здесь я хочу перепутать оба поста и получить .. Могу ли я сделать это .. EDIT:

МОЖЕТ вернуть любое значение для метода Ajax POST. Поскольку я хочу вернуть идентификатор формы сохраненной формы ..

Edit:

alert("Data Saved: "+msg); gives as

 Data Saved: {"forms":[{"id":"41"},{"id":"35"},{"id":"34"},{"id":"33"},{"id":"32"},{"id":"22"},{"id":"3"},{"id":"2"},{"id":"1"}]}

Выше - это то, что возвращаемое значение, я хочу только id 41, как я должен получить его?

EDIT:

     $.ajax({
     type: "POST",
    url: "http://localhost/FormBuilder/index.php/forms/saveForm/"+user_id,
    datatype: 'json',
    data: "formname="+formname+"&status="+status,
     success: function(json){
        alert( "id is : " + json.forms[0].id);
                            }//success
     });//ajax

Даже я попробовал это с приведенным выше кодом, как было предложено, но я не могу получить сообщение с предупреждением

Мой код контроллера похож на

     function saveForm()
    {
            //$userId=$this->Session->read('userId');
        $this->data['Form']['name']=$this->params['form']['formname'];
            $this->data['Form']['created_by']=$this->Session->read('userId');
            $this->data['Form']['status']=$this->params['form']['status'];
            $this->data['Form']['access']="Private";
            $userId=$this->Form->saveForms($this->data);
            $formid = $this->Form->find('all', array('fields' => array('Form.id'),
                                    'order' => 'Form.id DESC'                                                                           ));



            $this->set('formid',$formid);

    }

И мой save_form.ctp имеет

      <?php
     $data=array();

      ?>
     <?php foreach ($formid as $r): 


      array_push($data, array('id' => $r['Form']['id']));

    endforeach; 

     echo json_encode(array("forms" => $data));

    ?>

Ответы [ 6 ]

7 голосов
/ 11 августа 2009

Да, вы можете сделать это. Вы можете POST на любой URL, который вам нравится, с или без строки запроса.

Вы можете получить доступ к любым обычным параметрам строки запроса в массиве $ _GET или, в вашем случае, проанализировать его из $_SERVER['REQUEST_URI']. Данные POSTed будут в $ _POST, как и ожидалось.

Отредактировано Q. # 1 «Могу ли я вернуть какое-либо значение для метода Ajax POST?»

Да, вы можете вернуть все, что захотите, в качестве ответа Ajax. Что вы делаете с этим ответом, зависит от вашего Javascript.

Отредактировано Q. # 2 «Как прочитать значение в ответе»

Вы получаете ответ JSON, если вы скажете jQuery, что ожидаете, что , он может разобрать его в объект для вас. Например, попробуйте что-то вроде этого:

$.ajax({
         type: "POST",
        url: "http://localhost/FormBuilder/index.php/forms/saveForm/"+user_id,
        datatype: 'json',
        data: "formname="+formname+"&status="+status,
         success: function(json){
            alert( "id is : " + json.forms[0].id);
                                }//success
 });//ajax
1 голос
/ 21 июля 2013

На самом деле это просто.

var myJavaScriptVariable = 'world';

$.ajax({
 type: "POST",
url: "http://localhost/FormBuilder/index.php/forms/saveForm/"+user_id+?myFirstGetParamater=hello&mySecondGetParameter='+ myJavaScriptVariable+'",

data: "formname="+formname+"&status="+status,
 success: function(msg){
 // alert( "Data Saved: " + msg);
            }//success
});
0 голосов
/ 05 ноября 2009

Кратко протестировано, но вот решение, которое кажется работающим Страница формы: <!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> <script type="text/javascript" src="../../scripts/ajax.js"></script> <script type="text/javascript"> function send_ajax(){ get = '?get_text=' + document.getElementById("get_text").value; get = get +'&get_text2=' + document.getElementById("get_text2").value; post = "post_text="+document.getElementById("post_text").value; post = post + "&post_text2="+document.getElementById("post_text2").value; path = 'prosses.php'; // path to server side prossessing page. element = 'result'; // placeholder for the html returned from the server side prossessing page. ajax(path,get,post,element); } </script> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>ajax testing page</title> </head> <body> GET1: <input type="text" id="get_text" onkeyup="send_ajax()" /><br /> GET2:<input type="text" id="get_text2" onkeyup="send_ajax()" /> <br /><br /> <form action="" method="post"> POST1:<input id="post_text" type="text" /><br /> POST2:<input id="post_text2" type="text" /><br /> <input type="button" value="Button" onclick="send_ajax()" /><br /> </form> <span id="result">Result will appear here</span> </body> </html> Ajax-скрипт: var xmlhttp; function ajax(path,get,post,element){ ajax_suite(path,get,post); function ajax_suite(path,get,post){ xmlhttp=GetXmlHttpObject(); if (xmlhttp==null){ alert ("http requests are not supported by your browser"); return; } if(get == ""){ rand = "?sid="+Math.random(); }else{ rand = "&sid="+Math.random(); } var url=path + get + rand; xmlhttp.onreadystatechange=stateChanged; xmlhttp.open("POST", url, true); xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlhttp.setRequestHeader("Content-length", post.length); xmlhttp.setRequestHeader("Connection", "close"); xmlhttp.send(post); } function stateChanged(){ if (xmlhttp.readyState==3){ document.getElementById(element).innerHTML="Loading..."; } if (xmlhttp.readyState==4){ document.getElementById(element).innerHTML=xmlhttp.responseText; } } function GetXmlHttpObject(){ if (window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome, Opera, Safari return new XMLHttpRequest(); } if (window.ActiveXObject){ // code for IE6, IE5 return new ActiveXObject("Microsoft.XMLHTTP"); } return null; } } Страница обработки php: GET1 = <?php echo $_GET['get_text']; ?><br> GET2 = <?php echo $_GET['get_text2']; ?><br> POST1 = <?php echo $_POST['post_text']; ?><br> POST2 = <?php echo $_POST['post_text2']; ?><br> Надеюсь, это поможет Блейз.

0 голосов
/ 11 августа 2009

Даже почтовый запрос вернет некоторые данные клиенту. Если ваш серверный скрипт возвращает какие-либо данные, они будут переданы в функцию success: function(data){}. Разберись оттуда!

0 голосов
/ 11 августа 2009

Нельзя смешивать POST и GET в одном и том же AJAX-запросе, потому что AJAX-запрос является HTTP-запросом, а в одном HTTP-запросе есть один и только один метод (GET, HEAD, POST, PUT, DELETE, TRACE или CONNECT. хотя я никогда не видел, чтобы последние два использовались, а PUT и DELETE не так уж и распространены).

Кроме того, неясно, что вы подразумеваете под "Идентификатором формы" - является ли URL-адрес, который вы отправляете, для возврата какого-то уникального идентификатора при успешном выполнении POST?

0 голосов
/ 11 августа 2009

Я предполагаю, что в результате запроса ajax форма сохранено сценарием PHP, и вы хотите получить идентификатор сохраненной формы.

Если это так, установите свой php-скрипт на echo идентификатор сохраненной формы, так как только вывод. Тогда вы можете использовать:

 success: function(id{
         // alert( "Data Saved: " + id);
                                }//id is the id
 });//ajax
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...