2009-10-14 7 views
10

Muszę serializować wszystkie dane wejściowe z formularza na ciąg JSON.
Z pomocą this post, mogę z powodzeniem stworzyć prawidłowy ciąg jak poniżej:jQuery: Jak zatrzymać funkcję AJAX wymykającą się z łańcucha JSON używanego do danych POST

{"input01":"value01","input02":"value02","input03":"value03"} 

Jednak, gdy próbuję użyć ciąg POST danych przy użyciu funkcji jQuery Ajax, wydaje się, aby dodać backslashy do łańcucha , w wyniku czego ciąg JSON jest wysyłany za pomocą GET zamiast POST. Załadowany strona PHP zwraca $_GET tablicy:

[{\"input01\":\"value01\",\"input02\":\"value02\",\"input03\":\"value03\"}] => 

I testowano ciąg JSON pomocą alert() celu potwierdzenia struktury jest poprawna, po czym stosuje w funkcji AJAX.
Dodatkowo, jeśli po prostu ręcznie wpisz prawidłowy ciąg JSON, AJAX wysyła poprawnie dane.

Mój kod wygląda następująco:

var dataJSON = $.toJSON($('#form').serializeObject()); 
alert(dataJSON); 

$.ajax({ 
    type: "POST", 
    url: "ajax.php", 
    data: 'Query01=01&Query02=02', 
    dataType: 'json', 
    success: function(data){ 
     if (data==1){ 
     $('#wrap').load('ajax.php',dataJSON); 
     } 
    } 
}); 
+0

Dzwonisz '.ajax()', następnie złożenia kolejnego wniosku z 'ajax .load()'. Czy to jest poprawne? –

+0

Roatin, zgadza się. Powyższy przykład jest uproszczony z mojego aktualnego skryptu. Rzeczywisty skrypt wysyła dane za pomocą $ .ajax, który musi zostać sprawdzony, jeśli funkcja zostanie pomyślnie zweryfikowana, funkcja $ .load ładuje HTML wygenerowany z danych opublikowanych przez ciąg JSON. – ticallian

Odpowiedz

1

Po szorowania Google i witryny jQuery, Doszedłem do wniosku, że osobiste funkcja $.load zamieni każdą zmienną przekazaną do niej jako kwerendy (W moim oryginalnym problemu opisane powyżej). Jeśli chcesz przekazać ciąg JSON przez niego, należy go wpisać ręcznie.

Aby obejść ten problem, użyłem zamiast tego funkcji niskiego poziomu $.ajax. Zaletą tej metody było to, że mogłem również wysłać dane POST przy użyciu standardowej funkcji .serialize(), zamiast konwertować dane formularzy na JSON.

Moja ostatnia Kod:

var formData = $('#form').serialize(); 

$.ajax({ 
    type: "POST", 
    url: "ajax.php", 
    data: 'Query01=01&Query02=02', 
    dataType: 'json', 
    success: function(data){ 
      if (data==1){ 
       $.ajax({ 
        type: "POST", 
        url: "ajax.php", 
        data: formData, 
        success: function(html){ 
         $("#wrap").replaceWith(html); 
        } 
       }); 
      } 
    } 
}); 

Jeśli ktoś ma rozwiązanie, prosimy o komentarz.

+1

Ponieważ używasz php jako serwera. Chyba mogłeś użyć funkcji php "stripslashes()" –

11

Jest to domyślne zachowanie $.ajax(). Możesz to zmienić, ustawiając opcję processData na false. Zobacz $.ajax() options.

data Object, String 

dane mają być przesyłane do serwera. Jest to przekonwertowany na ciąg zapytania, jeśli nie już ciąg znaków. Jest on dołączany do adresu URL dla żądań GET. Aby zapobiec automatycznemu przetwarzaniu , zobacz opcję processData . Obiekt musi być parami klucz/wartość . Jeśli wartością jest tablica, jQuery serializuje wiele wartości za pomocą tego samego klucza , tj. {Foo: ["bar1", "bar2"]} staje się "& foo = bar1 & foo = bar2 '.

i

processData Boolean Default: true 

Domyślnie dane przekazywane w danych opcja jako przedmiot (technicznie, coś innego niż ciąg) będzie przetwarzane i przekształcony w zapytaniu ciąg znaków, dopasowany do domyślnego formatu zawartości "application/x-www-form-urlencoded". Jeśli chcesz wysłać DOMDocuments lub inne nieprzetworzone dane, ustaw tę opcję na na wartość false.

+0

Przetestowałem wymienione wyżej informacje bez żadnego szczęścia. Z tego, co widzę, opcje $ .ajax nie mają wpływu na zagnieżdżoną funkcję $ .load. Jakieś pomysły na to, jak mogę zmienić te same opcje dla $ .load? – ticallian

+0

@ticallian Nie wiem, dlaczego i tak potrzebujesz funkcji ładowania wewnątrz funkcji sukcesu. Czy nie możesz uzyskać wszystkiego, czego potrzebujesz w żądaniu $ .ajax, używając wartości json? – Metropolis

+0

'processData: false' nie zwróciło niczego –

2

mieć pewność, że

echo $_GET['varwithurl'] 

nie

echo json_encode($_GET['varwithurl']) 

jak wiele przykładów php web zrobić.

Wysyłam dane za pomocą adresu URL z $.ajax() i nie widzę niechcianych odwrotnych ukośników w skrypcie php.

-2
<html> 
<head> 
<script src="resources/jquery-2.1.0.js"></script> 
<script src="resources/jquery.serializejson.min.js"></script> 
</head> 
<body> 
    <script> 

     $(document).ready(function(){ 

      $("#simplepost").click(function(e){ 

       var MyForm = $("#appForm").serializeJSON(); 
       console.log(MyForm); 

      $.ajax(
        { 
         url: "rest/emp/create", 
         type: "POST", 
         data: JSON.stringify(MyForm), 
         contentType: "application/json; charset=utf-8", 
         dataType: "json", 
         success:function(maindta){ 
          alert(maindta); 
         }, 
         error: function(jqXHR, testStatus, errorThrown){ 
          alert(errorThrown); 
         } 
        }); 
      e.preventDefault(); //STOP default action 
     }); 
    }); 
</script> 
<h2>Hello World!</h2> 
<form id="appForm" method="POST"> 
    EmployeeID:<input type="text" name='id' value="" /> 
    Employee Name:<input type="text" name="name" value=""/> 
<br> 
<input type="button" value="Submit" id="simplepost" /> 
</form> 
</body> 
</html> 
+2

Zrzuty kodów bez wyjaśnienia rzadko są pomocne. Zastanów się nad dodaniem kontekstu do swojej odpowiedzi. – Chris

0

Zrobiłem to tak, że działa z stripslashes po stronie php.

coś takiego:

$data = json_decode(stripslashes($_POST['json_data'])); 
Powiązane problemy