JQuery-array wordt niet gewijzigd wanneer json callback

Ik wil dat de arr1-waarde wordt gewijzigd in arr2-waarde (test.php) wanneer klikgebeurtenis wordt geactiveerd. Er is echter een fout opgetreden in de volgende code.

Kan iemand me helpen? Bedankt!

$(function(){
               var arr1 = ["apple","banana","orange"];

               $("input").click(function(){
                   $.ajax({
                          type:"post",
                          url:"test.php",
                          cache:false,
                          success: function(data) {
                                arr1 = data;
                              }
                          });
                });

    });

------- test.php ------------------------------------- ---

<?php   
    echo $arr2 =array("Saab","Volvo","BMW","Toyota"); 

?>
2
toegevoegd de auteur hakre, de bron

3 antwoord

Je manipuleert niet dezelfde soort gegevens! U moet uw php-array json_encode

echo json_encode($arr2);

om het als een array op te halen in uw JS-functie

0
toegevoegd
Gewoon dataType toevoegen: "json" om er zeker van te zijn dat je manipuleert json retourneert, in JS-kant en het is al een array binnen de succesfunctie die klaar is om gemanipuleerd te worden
toegevoegd de auteur guillaumepotier, de bron
Dit alleen zal niet werken, het is tenslotte maar een touwtje. Je moet het nog steeds decoderen.
toegevoegd de auteur middus, de bron

U moet JSON gebruiken om complexe objecten over te zetten naar javascript. In PHP codeer je je array met json_encode , zoals deze:

<?php
    $arr2 = array("Saab","Volvo","BMW","Toyota");
    echo json_encode($arr2);
?>

Dan moet je jQuery vertellen om in json te praten met behulp van dataType: 'json' , zoals dit:

$.ajax({
    type: "post",
    url: "test.php",
    dataType: "json",
    cache: false,
    success: function(data) {
        arr1 = data;
    }
});
0
toegevoegd

Je kunt niet zomaar echoën. Dit is wat u waarschijnlijk wilt doen

$arr2 = array("Saab", "Volvo", "BMW", "Toyota");
echo json_encode($arr2);

Gebruik dan $. GetJSON() .

0
toegevoegd
getJSON() werkt hier niet in het algemene geval. Voor zijn "test.php" zal het, maar dat is maar een voorbeeld. Het ziet er hier naar uit dat hij een POST -aanvraag doet, geen GET -verzoek. getJSON() doet alleen GET aanvragen. Je moet ajax() hier gebruiken met dataType: 'json' .
toegevoegd de auteur Ben Lee, de bron
In dit geval zou je geen POST gebruiken, maar ik neem aan dat dit slechts een minimale testcase was. Als het eigenlijke geval een GET is, werkt elke methode.
toegevoegd de auteur Ben Lee, de bron
Hoewel dit het geval kan zijn, is het IMHO twijfelachtig of het zinvol is om POST te gebruiken voor deze zaak, nietwaar? Dit vraagt ​​alleen om een ​​hulpbron.
toegevoegd de auteur middus, de bron