$.ajax JQuery probléma (nem jut el a success-ig)

$.ajax JQuery probléma (nem jut el a success-ig)
2010-06-07T13:46:44+02:00
2010-06-07T19:11:25+02:00
2022-11-18T00:41:35+01:00
drowmage
A címben említett problémába botlottam. A beforeSend is lefut, de a success már nem. A hívás kb. így néz ki:
$.ajax({url: 'index.php', data: $('#form1').serialize(), type: 'POST', dataType: 'json', timeout: 5000,

error:function (xhr, ajaxOptions, thrownError){
alert(xhr.responseText);
alert(thrownError);
},
beforeSend: function() {
alert(data);
}

success: function(data) {
$('table#table1 tbody').empty();
$.each(data, function(key, val) {
$('<tr><td>'+key+'</td><td>'+val+'</td></tr>').appendTo('table#table1 tbody');
});
}
});
Az index.php lefut (ez a fájl egy template-fájlt jelenít meg, az megadja a header-ben a type: application/json opciót). Ha a visszaadandó adatokat echo-val kiíratom, az megjelenik az oldalon, de a success-hez nem jut el. Van valami ötletek, hogyan keressem meg a hibát? Az error: function nem ad vissza semmi értelmest. A két alert felbukkan, de az egyik üres, a másik pedig undefined szövegű.
Mutasd a teljes hozzászólást!
végülis a return false; volt a hibás.

index.php-ben az else ágat visszaraktam - tehát ami eredetileg volt, illetve js.js -ben is vissza alakítottam ami volt.

... else { if (isset($_POST['key']) && is_array($_POST['key']) && isset($_POST['val']) && is_array($_POST['val'])) { $data = new data(array_combine($_POST['key'], $_POST['val'])); $json = array(); foreach ($data as $key => $val) { $json[$key] = $val; } echo json_encode($json); } }

js.js (sleepen kívül):

$(document).ready(function () { var data__ = new Array(); var val__ = new Array(); var val_sum = 0; $('#test_form').submit(function () { $.ajax({ url: 'index.php', data: $('#test_form').serialize(), type: 'POST', dataType: 'json', timeout: 5000, beforeSend: function () { alert("before"); }, error: function (xhr, ajaxOptions, thrownError) { alert(xhr.responseText); alert(thrownError); return false; }, success: function (data) { alert("success" + data); $('table#test_table tbody').empty(); $.each(data, function (key, val) { $('<tr><td>' + key + '</td><td>' + val + '</td></tr>').appendTo('table#test_table tbody'); }); } }); return false; }); });

ha dataType = json de nem tudja json objecté alakítani(tele volt echo-val az index.php) akkor error-ba fut, ez volt most legutóbb. Remélem így már jó lesz.
Mutasd a teljes hozzászólást!

  • success előtt lehet kéne egy ,(vessző) nem?

    $.ajax({ url: 'index.php', data: $('#form1').serialize(), type: 'POST', dataType: 'json', timeout: 5000, error: function (xhr, ajaxOptions, thrownError) { alert(xhr.responseText); alert(thrownError); }, beforeSend: function () { alert(data); }, success: function (data) { $('table#table1 tbody').empty(); $.each(data, function (key, val) { $('<tr><td>' + key + '</td><td>' + val + '</td></tr>').appendTo('table#table1 tbody'); }); } });
    Mutasd a teljes hozzászólást!
  • Bocsánat, ott volt. Másolás közben tüntettem el.
    Mutasd a teljes hozzászólást!
  • akkor bocsi.

    Az error: function nem ad vissza semmi értelmest. A két alert felbukkan, de az egyik üres, a másik pedig undefined szövegű.


    nézegettem, akármi csináltam csak akkor jött elő a fenti hiba, ha timeout-ot túllépi, vagyis neked több mint 5 másodpercig csinál valamit az index.php és nem kap választ...
    Mutasd a teljes hozzászólást!
  • Ha megcserélem a beforeSend-et és az error-t,akkor a beforeSend lefut, az error nem.
    Tényleg nem tudom mi a gond, mert az echo-val kiíratva az eredmény 1 másodpercen belül megjelenik. Nincs is amiért tovább gyötrődne, mert a formból hat értéket beolvas, json alakban elmenti egy tömbbe, majd json encode. S ezt echo-zom.
    Mutasd a teljes hozzászólást!
  • Az pedig külön érdekes, hogy másképp viselkedik a honlap ff 3.6-ban, mint chrome-ban. A chrome-ban mindenképp lefut az error is.
    Mutasd a teljes hozzászólást!
  • Sejtem javítottad(ha hibás és nem valami globális változó a data):
    beforeSend: function () {
    alert(data);
    },


    itt nem találta nálam a `data` nevű változót, lehet neked valahonnan jön, ha nem akkor a function-be be kéne rakni szerintem(bár nálam az egész js behal, szal valószínűleg más a baj):

    beforeSend: function (data) { alert(data); },
    Mutasd a teljes hozzászólást!
  • Arra gyanakodtam, hogy itt lehet a gond:
    data: $('#form1').serialize(),
    Ezért próbáltam kiíratni, de tényleg nem megy.Az ff átlépi, a chrome teljesen megdermed.
    Mutasd a teljes hozzászólást!
  • Hogyan lehetne egy értelmes hibaüzenetet kicsalni a kérésből? Mert vmi hibádzik, az OK, de hol?
    Mutasd a teljes hozzászólást!
  • Na vmi történt.

    $.ajax({url: 'index.php', data: $('#test_form').serialize(), type: 'POST', dataType: 'json', timeout: 5000, beforeSend: function() { alert("before"); }, error:function (xhr, ajaxOptions, thrownError){ alert(xhr.responseText); alert(thrownError); }, success: function(data) { alert("success"); $('table#test_table tbody').empty(); $.each(data, function(key, val) { $('<tr><td>'+key+'</td><td>'+val+'</td></tr>').appendTo('table#test_table tbody'); }); } });

    Íme a mostani kód. A chrome Javascript konzolja az error első alertje előtt az dobja, hogy
    Failed to load resource.


    Olyan, mintha az index.php-t nem találná. De nem tudom úgy megadni az útvonalat, hogy megfeleljen neki.
    Mutasd a teljes hozzászólást!
  • Fel tudod valahova rakni? Nálam nem jön elő a hiba, akármit csinálok.
    Próbáld meg kivenni a `dataType: 'json'` -t és php oldalon a headert is ha van, és úgy mit ad vissza.
    Mutasd a teljes hozzászólást!
  • Egen, úgy tűnik, ott a probléma, viszont nem tudom, akkor mit tegyek vele.
    A honlap az extrán van. A wwwroot könyvtáramban van egy apptest könyvtár. Ennek gyökerében van az index.php. Van egy js könyvtár, abban pedig a javascript.
    Vmiért nem akarja elérni.

    $.ajax{url:...
    Mutasd a teljes hozzászólást!
  • Csomagoljam össze az egészet? Vagy csak a js és a php file kell?
    Itt meg tudod nézni: http://www.elfmage.extra.hu/apptest/index.php?
    Mutasd a teljes hozzászólást!
  • Próbáld meg kivenni a `dataType: 'json'` -t és php oldalon a headert is ha van, és úgy mit ad vissza.


    Próbáltam, és nem...és nem. Akkor sem.
    Mutasd a teljes hozzászólást!
  • megvan... el sem hiszem... és nem az ajax volt a rossz, hanem a return false; van rossz helyen!

    Ha jobban megnézed akkor nem a submit-nak adod a return false; -t, hanem eggyel lejjebb a ready-nek, aminek a következtében a jquery felmondja a szolgálatot. LOL.
    Mutasd a teljes hozzászólást!
  • fáradt vagyok, s lehet hogy nem fogom, de nekem nem megy. Áthelyeztem a return false-t (alább). De nem.

    $('#test_form').submit(function() { $.ajax({url: 'index.php', data: $('#test_form').serialize(), dataType:'json', type: 'POST', timeout: 5000, beforeSend: function() { alert("before"); }, error:function (xhr, ajaxOptions, thrownError){ alert("ghj "+xhr.responseText); alert(thrownError); }, success: function(data) { alert("success"); $('table#test_table tbody').empty(); $.each(data, function(key, val) { $('<tr><td>'+key+'</td><td>'+val+'</td></tr>').appendTo('table#test_table tbody'); }); } }); return false; });

    Az xhr.responseText-ben megjelenik amit a php-ben echo-zok,de ennyi.
    Mutasd a teljes hozzászólást!
  • létszi tedd még bele ezeket az error function-be:
    alert("status: "+xhr.status);
    alert("readyState: "+xhr.readyState);

    Index.php-nek mi a forrása?
    Mutasd a teljes hozzászólást!
  • Benne van.
    Itt mindent megtalálsz. Kivétel az utolsó módosítások.
    Download
    Mutasd a teljes hozzászólást!
  • végülis a return false; volt a hibás.

    index.php-ben az else ágat visszaraktam - tehát ami eredetileg volt, illetve js.js -ben is vissza alakítottam ami volt.

    ... else { if (isset($_POST['key']) && is_array($_POST['key']) && isset($_POST['val']) && is_array($_POST['val'])) { $data = new data(array_combine($_POST['key'], $_POST['val'])); $json = array(); foreach ($data as $key => $val) { $json[$key] = $val; } echo json_encode($json); } }

    js.js (sleepen kívül):

    $(document).ready(function () { var data__ = new Array(); var val__ = new Array(); var val_sum = 0; $('#test_form').submit(function () { $.ajax({ url: 'index.php', data: $('#test_form').serialize(), type: 'POST', dataType: 'json', timeout: 5000, beforeSend: function () { alert("before"); }, error: function (xhr, ajaxOptions, thrownError) { alert(xhr.responseText); alert(thrownError); return false; }, success: function (data) { alert("success" + data); $('table#test_table tbody').empty(); $.each(data, function (key, val) { $('<tr><td>' + key + '</td><td>' + val + '</td></tr>').appendTo('table#test_table tbody'); }); } }); return false; }); });

    ha dataType = json de nem tudja json objecté alakítani(tele volt echo-val az index.php) akkor error-ba fut, ez volt most legutóbb. Remélem így már jó lesz.
    Mutasd a teljes hozzászólást!
  • Köszönöm.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd