JSON veya XML kullanarak JavaScript dizi gönderebilir?

4 Cevap php

Tamam, benim durum böyle: Ben bir PHP komut dosyası MYSQL veritabanında tek tek dizi girişleri devam edecek sunucuya bir JavaScript dizinin içeriğini göndermek gerekiyor. JQuery kullanarak değilim ama benim projeye Prototip çerçevesinde entegre etmek üzereyim.

I JS dizi kolayca () metodu Prototip tarafından sağlanan toJSON kullanarak JSON dönüştürülebilir toplamak. Sonra nasılsa dizi-JSONise de ve DB içine değerler eklemek istiyorum benim komut dosyası için bu POST olabilir.

Ama ne de ilgileniyorum JSON veri değişim formatı kullanılarak, ama çok kolay SimpleXML PHP uzantısı (kendime bazı geliştirme zamanı sunucu tarafı kaydedin) ile çözümlenen XML içine JS dizi, dönüştürme DEĞİLDİR. Benim soru (lar) şu şekilde olacaktır: JSON veya XML için gitmeli? ve nasıl XML içine JS dizi dönüşebilir? (ToJSON olduğu gibi toXML () yöntemi Prototip) (var mı?)

Ben çok benzer sorular çok çeşitli farkında değilim, ama hepsi JS diziler JSON dönüştürme ... Bu soru etrafında başka bir yol sormak gibi görünüyor, ve birçok jQuery ilişkilidir. Yani bu potansiyel bir yinelenen ve bu başka bir yere cevap gelmiş olsa bile, lütfen bana yardım edin.

4 Cevap

Sen php_json uzatma yöntemleri denedi? Bunları kullanarak bir PHP Object içine JSON nesnesi açmak mümkün olacak.

Oradan ne istersen yapabilirsin. SimpleXML ile işlemek veya DataStore için kalıcı bir XML dizesi olun.

PHP yerleşik json_decode kullanmak eğer gerçekten geliştirme zamandan tasarruf edeceksiniz

ToJSON () kullandıktan sonra, sizden, XML JSON dönüştürmek için kullanabilirsiniz goessner.net (source file) olabilir:

/*  This work is licensed under Creative Commons GNU LGPL License.

    License: http://creativecommons.org/licenses/LGPL/2.1/
    Version: 0.9
    Author:  Stefan Goessner/2006
    Web:     http://goessner.net/ 
*/
function json2xml(o, tab) {
   var toXml = function(v, name, ind) {
      var xml = "";
      if (v instanceof Array) {
         for (var i=0, n=v.length; i<n; i++)
            xml += ind + toXml(v[i], name, ind+"\t") + "\n";
      }
      else if (typeof(v) == "object") {
         var hasChild = false;
         xml += ind + "<" + name;
         for (var m in v) {
            if (m.charAt(0) == "@")
               xml += " " + m.substr(1) + "=\"" + v[m].toString() + "\"";
            else
               hasChild = true;
         }
         xml += hasChild ? ">" : "/>";
         if (hasChild) {
            for (var m in v) {
               if (m == "#text")
                  xml += v[m];
               else if (m == "#cdata")
                  xml += "<![CDATA[" + v[m] + "]]>";
               else if (m.charAt(0) != "@")
                  xml += toXml(v[m], m, ind+"\t");
            }
            xml += (xml.charAt(xml.length-1)=="\n"?ind:"") + "</" + name + ">";
         }
      }
      else {
         xml += ind + "<" + name + ">" + v.toString() +  "</" + name + ">";
      }
      return xml;
   }, xml="";
   for (var m in o)
      xml += toXml(o[m], m, "");
   return tab ? xml.replace(/\t/g, tab) : xml.replace(/\t|\n/g, "");
}

O dedi, ben şahsen JSON için gitmek istiyorum.

Ben tüm dönüşüm sürecini ortadan kaldıracak bir yerel sorgu dizesi kullanmanızı öneririz. Burada uygun dönüşüm yapacak kodu:

/**
 * This function serializes the object to a standart URI query string which can directly interpreted by PHP.
 * 
 * @param {String} [format] The desired format for the output. Not needed for most usages.
 * @return {String} The URI query string.
  */
Object.prototype.toQueryString=function(format, encodeURI)
{
    if (typeof format!='string')
    	format='%s';
    var result='';
    for (var paramName in this) 
    {
    	if (this.constructor==Array && isNaN(parseInt(paramName)) || !this.hasOwnProperty(paramName))
    		continue;

    	if (this[paramName].constructor==Object || this[paramName].constructor==Array)
    		result += '&' + this[paramName].toQueryString(format.format(paramName) + '[%s]', encodeURI);
    	else
    		result += '&' + format.format(paramName) + '=' + ((encodeURI!==false)?encodeURIComponent(this[paramName]):this[paramName]);
    }
    return result.substr(1);
};

Bazı Object.prototype kullanarak gibi olmayabilir. Eğer onlardan biri iseniz tefriş ayrı bir işlevi olarak hizmet işlevini değiştirebilirsiniz. Yardıma ihtiyacınız olursa, bana vurmak ;)