JQuery ajax işlevi çalışır ancak doğru değişken iade edemez

0 Cevap php

Ben bu fonksiyonlar düzgün bir işlev runAjax var. Ne yazık ki ben ajax sorgudan almak değerini döndürmek için mücadele ediyorum.

Ajax fonksiyonu "içindekiler" veya değişken "sonuç" için "hata" xml etiketlerinin içinde döndürülen değeri atar.

Ben ajax işlevi içinde sonuç değişkeni uyarmak eğer doğru değeri (içeriğini içinde xml değer "yayımlanan" ise yani yayınlandı uyarıları) uyarır.

I runAjax işlevinden döndürülen değeri uyarır, ancak bunun yerine, bir nesneyi, yukarıdaki örnekte "yayımlanan" bir iç değişken "sonuç" değerini uyarır.

function runAjax (data_obj){
  return $.ajax({
      url:"/ajax.php",
      dataType: "xml",
      data: data_obj,
      success: function(data) {
        // format result
        var xml;
        if (typeof data == "string") {
          xml = new ActiveXObject("Microsoft.XMLDOM");
          xml.async = false;
          xml.loadXML(data);
        } else {
          xml = data;
        }
        var result;
        if($("error",xml).text()){
          result = [$("error",xml).text()];
        } else{
          result = [
            $("contents", xml).text()
          ];
        }
      alert(result); //alerts the correct string for example "published"
      return result;
      }
    });
  }
  $('ul.content li span.changeable').click(function(e){
    e.preventDefault();
    var method_set = $(this).parent().attr("class");
    var id_set = $(this).parent().parent().find('li.id span').html();
    var user = $(this);
    var result = runAjax({method: method_set, id: id_set});
    alert(result); //alerts an object not published

  });

Ben değişken dönen yolu ile ilgili bir şey var ama ben bunu anlamaya olamaz emin im. Herhangi bir giriş çok takdir.

Regards Luke

UPDATE: This is the revised code that works thanks to all the input from people below:

  function runAjax (data_obj,callback){
    $.ajax({
      url:"/ajax.php",
      dataType: "xml",
      data: data_obj,
      success: function(data) {
        // format result
        var xml;
        if (typeof data == "string") {
          xml = new ActiveXObject("Microsoft.XMLDOM");
          xml.async = false;
          xml.loadXML(data);
        } else {
          xml = data;
        }
        var result;
        if($("error",xml).text()){
          result = [$("error",xml).text()];
        } else{
          result = [
          $("contents", xml).text()
          ];
        }
        if ( typeof(callback) == "function") {
          callback(result);
        }
      }
    });
  }
  $('ul.content li span.changeable').click(function(e){
    e.preventDefault();
    var method_set = $(this).parent().attr("class");
    var id_set = $(this).parent().parent().find('li.id span').html();
    var user = $(this);
    runAjax({
      method: method_set, 
      id: id_set
    },
    function(result){
      $(user).html(result.join('')); //this is instead of alert(result);
    }
    );

  });

0 Cevap