2009-10-30 28 views
10
$.ajax({ 
    method: "post" 
    , url: "save.php" 
    , data: "id=453&action=test" 
    , beforeSend: function(){ 

    } 
    , complete: function(){ 
    } 
    , success: function(html){ 
     $("#mydiv").append(html);   
    } 
}); 

I Methode Art als Post gesetzt haben, aber in Save.php ich nur Werte erhalten entweder in $_GET oder $_REQUEST aber nicht in $_POST.

Meine Form wie folgt aussieht:

<form method="post" id="myform" action="save.php"> 

Es funktioniert nicht, um hier sah und auf Google versuchte enctype

<form method="post" id="myform" action="save.php" enctype="application/x-www-form-urlencoded"> 

aber noch $_POST leer Hinzufügen?

Wie kann ich es funktionieren lassen?

+1

Gerade hatten ein ähnliches Problem mit jQuery ajaxForm Plugin. Ich habe es gelöst, indem ich dafür gesorgt habe, dass jedes Eingabeelement ein "Name" -Attribut hat. Meins entsprach dem ID-Selektor, aber dies ist möglicherweise nicht notwendig. – jbrain

Antwort

8

Statt method: "post" Sie müssen dies Ihrem Formular HTML ohne Änderungen funktionieren sollte also type: "POST"

verwenden:

$.ajax({ 
    type: "POST" 
    , url: "save.php" 
    , data: "id=453&action=test" 
    , beforeSend: function(){ 

    } 
    , complete: function(){ 
    } 
    , success: function(html){ 
     $("#mydiv").append(html);   
    } 
}); 

nicht sicher, warum es nicht funktioniert, aber das funktioniert für mich:

save.php

<?php 
print_r($_POST); 

file.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
    <title>Example</title> 

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <script type="text/javascript"> 
     $(function() { 
      $('input').click(function() { 
       $.ajax({ 
        type: "POST" 
        , url: "save.php" 
        , data: "id=453&action=test" 
        , beforeSend: function(){ 

        } 
        , complete: function(){ 
        } 
        , success: function(html){ 
         alert(html);   
        } 
       }); 
      }); 
     }); 
    </script> 
</head> 

<body> 
    <div id="main"><input type="button" value="Click me"></div> 
</body> 
</html> 

Ihre Fehler muss woanders liegen.

+0

Nö .. funktioniert nicht. – TigerTiger

+0

@Wbdvlpr: Öffnen Sie die Firebug-Konsole und überprüfen Sie die gesendeten Anfragen. Sie können sehen, welche Methode verwendet wird (get/post) und welche Parameter an welche URL gesendet werden. Dann geh von dort. – serg

+0

Aber ich bekomme Werte in $ _GET und $ _REQUEST .. aber nicht in der $ _POST .. keine Ahnung, wie man überprüft, ob "woanders" ist falsch? – TigerTiger

4

Warum rufen Sie nicht direkt jQuery.post()?

$.post("save.php", 
    $("#myform").serialize(), 
    function(html) { 
    $("#mydiv").append(html);   
    }, 
    "html" 
); 

In Bezug auf jQuery.ajax(), zu type: "POST" Wechsel statt method: "POST" wird eine richtige POST Anfrage verursachen:

$.ajax({ 
     type: "POST", 
     url: "test.mhtml", 
     data: $("#myform").serialize(), 
     success: function(html){ 
       $('#mydiv').html(html); 
     } 
}); 

Dies zeigt sich in den Apache-Logs nach oben wie:

::1 - - - [30/Oct/2009:09:44:42 -0700] "POST /test.php HTTP/1.1" 200 9 "http://localhost:10501/test.mhtml" "(sic)" 

Mögliche alternatives Problem:
Ich habe this question on StackOverflow gefunden, während Sie sich Ihr Problem angesehen haben. Vielleicht ist es nicht die jQuery, die dir Probleme bereitet, es ist PHP? Die oben gestimmte Antwort hat einige Vorschläge dafür, dass PHP nicht zu stören, und die zweithöchste Antwort bietet einige Codes zu sehen, ob die Anforderung eines tatsächlich POST oder nicht:

<?php 
    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    echo 'POSTed'; 
    } 
?> 
+0

Wie wäre es mit dem vorhergehen, vollständig, Erfolg ?? mit .post ?? – TigerTiger

+0

verwenden Sie einfach: $ .post ("save.php", $ ("# myform"). Serialize(), Funktion (Daten) {$ ('. Msg'). Html (Daten);); (3. Argument ist ein Funktionsrückruf.) – CodeJoust

+0

Ich bearbeitet, um das dritte und vierte Argument einzuschließen. Das dritte Argument ist die Rückruffunktion für den Fall, dass Informationen zurückkommen, und das vierte Argument ist der Typ der Daten, die zurückkommen. jQuery wird einige Parsing für Sie durchführen, wenn Sie zum JSON-Rückgabetyp wechseln. –

3

Ich habe Schwierigkeiten mit den Variablen, die auch in der Mischung verloren und entdeckte, dass während der Verwendung von Rewrite Bedingungen zu extern umleiten dir/foo.php zu dir/foo Apache wurde die POST-Anfrage insgesamt und Umleiten.

Wenn Sie also das JavasSript schreiben, müssen Sie die Datei so referenzieren, dass externe Umleitungen vermieden werden können.

z.Fügen Sie den Erweiterungsnamen inline mit dem JavaScript ein.

schreiben

url: "dir/foo"

statt

url: "dir/foo.php"

Ich hoffe, dass andere, die diese Seite wie ich gefunden hilft.

+0

Danke! Dein Kommentar hat mir geholfen! :) – Zhenya

2

** hinzufügen unten Stück Code im Code vor Erfolg **

beforeSend: function(xhr){xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded")} 
+0

danach in meinem $ _POST erschien meine Daten! –