2016-12-23 3 views
0

Ich erstelle ein Ajax-Skript, um einige Felder in der Datenbank zu aktualisieren. Ich habe es zu einem Punkt gebracht, wo es funktionierte, aber es schickte den Benutzer an das PHP-Skript, anstatt auf der Seite zu bleiben, so dass ich etwas gegoogelt hatte, und die Leute schlugen vor, entweder return false zu verwenden; oder e.preventDefault() jedoch, wenn ich dies tue, bricht es das PHP-Skript auf der anderen Seite und gibt einen schwerwiegenden Fehler zurück. Ich könnte etwas sein neueres zu AJAX fehlt aber es sieht alles richtig zu mire.preventDefault/return false bricht das Ajax-Skript richtig ab

JS:

$(document).ready(function() { 
    var form = $('form#edit_child_form'), 
     data = form.serializeArray(); 

    data.push({'parent_id': $('input[name="parent_id"]').val()}); 

    $('#submit_btn').on('click', function(e) { 
     e.preventDefault(); 
     $.ajax({ 
      url:  form.prop('action'), 
      dataType: 'json', 
      type:  'post', 
      data:  data, 
      success: function(data) { 
       if (data.success) { 
        window.opener.$.growlUI(data.msg); 
       } 
      }, 
      error: function(data) { 
       if (!data.success) { 
        window.opener.$.growlUI(data.msg); 
       } 
      } 
     }); 
    }); 
}) 

AJAX:

<?php 
    //mysql db vars here (removed on SO) 


    $descriptions = $_GET['descriptions']; 
    $child_id  = $_GET['child_id']; 
    $parent_id = $_GET['parent_id']; 

    $get_child_ids = $dbi->query("SELECT child_ids FROM ids WHERE parent = ". $parent_id ." ORDER BY id"); //returns as object 
    $count   = 0; 
    $res   = array(); 

    while ($child_row = $get_child_ids->fetch_row()) 
    { 
     try 
     { 
      $dbi->query("UPDATE ids SET description = '$descriptions[$count]', child_id = '$child_id[$count]' WHERE parent_id = $child_row[0]"); 

      $res['success'] = true; 
      $res['msg']  = 'Success! DDI(s) updated'; 
     } catch (Exception $e) { 
      $res['success'] = true; 
      $res['msg']  = 'Error! '. $e->getMessage(); 
     } 

     $count++; 
    } 

    echo json_encode($res); 

es ist wahrscheinlich etwas wirklich klein, dass ich gerade verpasst haben, aber nicht sicher was - irgendwelche Ideen?

+0

was es auf anderen Seite bricht

Sie können nur das ändern? Nach Ajax bist du auf derselben Seite, was bricht dann? – ScanQR

+0

Was ist der schwerwiegende Fehler, den Sie bekommen? –

+0

, dass die Abfrage fehlschlägt, wenn ich Vars dump die Vars sie alle null mit e.preventDefault zurückgeben – TT120

Antwort

0

meine Lösung:

I var_dumped _GET $ und es kehrte null - geändert $ _REQUEST und es hat meine Daten so alles gut :) Danke für Anregungen

0

Versuchen Sie stattdessen Folgendes.
Ich habe die Formulardaten innerhalb von Klick verschoben und die mysql-Abfragen Werte in einfache Anführungszeichen eingeschlossen.

JS:

$(document).ready(function() { 
    var form = $('form#edit_child_form'); 

    $('#submit_btn').on('click', function(e) { 
     e.preventDefault(); 
     var data = form.serializeArray(); 

     data.push({'parent_id': $('input[name="parent_id"]').val()}); 

     $.ajax({ 
      url:  form.prop('action'), 
      dataType: 'json', 
      type:  'get', 
      data:  data, 
      success: function(data) { 
       if (data.success) { 
        window.opener.$.growlUI(data.msg); 
       } 
      }, 
      error: function(data) { 
       if (!data.success) { 
        window.opener.$.growlUI(data.msg); 
       } 
      } 
     }); 
    }); 
}) 

AJAX:

<?php 
    //mysql db vars here (removed on SO) 


    $descriptions = $_GET['descriptions']; 
    $child_id  = $_GET['child_id']; 
    $parent_id = $_GET['parent_id']; 

    $get_child_ids = $dbi->query("SELECT child_ids FROM ids WHERE parent = '". $parent_id ."' ORDER BY id"); //returns as object 
    $count   = 0; 
    $res   = array(); 

    while ($child_row = $get_child_ids->fetch_row()) 
    { 
     try 
     { 
      $dbi->query("UPDATE ids SET description = '$descriptions[$count]', child_id = '$child_id[$count]' WHERE parent_id = '$child_row[0]'"); 

      $res['success'] = true; 
      $res['msg']  = 'Success! DDI(s) updated'; 
     } catch (Exception $e) { 
      $res['success'] = true; 
      $res['msg']  = 'Error! '. $e->getMessage(); 
     } 

     $count++; 
    } 

    echo json_encode($res); 
0

Sie verwenden eine AJAX POST-Anfrage, so in Ihrem PHP sollten Sie Sie sein sing $ _POST und nicht $ _GET. diese

$descriptions = $_GET['descriptions']; 
$child_id  = $_GET['child_id']; 
$parent_id = $_GET['parent_id']; 

zu:

$descriptions = $_POST['descriptions']; 
$child_id  = $_POST['child_id']; 
$parent_id = $_POST['parent_id']; 
Verwandte Themen