группа - Аякс - 0 - to_do - последовательный доступ, стайлинг


Редактирование - 0 - все-таки нужно исправить язык разметки, чтобы сделать более уникальный, так что экранирование не требуется:

Это будет в формате JSON / альтернативные помощью jQuery.

/********************
group:ajax
********************/


/*
- ajax_object() - creates a browser dependent ajax_object for the ajax method call 
 - good place to add mysql logging to track object usage and reshape code via machine learning
 - ouptut - returns false or ajax_object
*/

function ajax_object()
  {
  var object;
  try
    {
    object=new XMLHttpRequest();
    }
  catch(error_1)
    {
    alert('ajax_object : not instantiated:contact-support@archemarks.com : Error : ' + error_1)
    }
  return object;
  }

/* 
- ajax() - post style ajax 
 - 'path' holds the servers side function to respond to the request
 - 'param' hold the serialized information to send the server
 - 'ajax_func' holds the javascript function to respond to the server
 - 'div' div holds the html location to send the response text
 -  Output: returns 1 for pass.
*/

function ajax(path,param,ajax_func,html_div)
  {
  var object=new ajax_object();
  object.open("POST",path,true);
  object.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  object.setRequestHeader("Content-length",param.length);
  object.setRequestHeader("Connection","close");
  object.onreadystatechange=function()
    {
    if(this.readyState===4)
      {
      if(this.status===200)
        {
        if(this.responseText!=null)
          {
          ajax_func(this.responseText,html_div);
          }
        else alert("ajax: responseText is null")
        }
      else alert('AJAX FAIL: Path - ' + path + ' .status = ' + this.status + ' . responseText = ' + this.responseText)
      }
    }
    object.send(param);
    return 1;
  }

/*
- "enumeration" for aml_status_type
*/

var aml_status_type = 
  {
  "pass":0, 
  "fail":1, 
  "undefined":2
  }

/*
- check_aml()
*/

function check_aml(text)
  {
  var aml_response=patterns.aml.exec(text);   
  if(aml_response)
    {
    if(aml_response[2]=='p') 
      {
      return aml_status_type.pass;
      }
    else if (aml_response[2]=='f')
      {
      return aml_status_type.fail; 
      }
    }
  else
    {
    return aml_status_type.undefined; 
    }
  }

/*
- ajax_signin()
*/

function ajax_signin(server_response_text,html_div)
  {
  var aml_status=check_aml(server_response_text.slice(0,6));
  if(aml_status===aml_status_type.pass)
    {
    reload();
    }
  else if(aml_status===aml_status_type.fail)
    {
    document.getElementById(html_div).innerHTML=''; 
    document.getElementById(html_div).innerHTML=server_response_text;  
    }
  else if(aml_status===aml_status_type.undefined)
    {
    server_response_text=server_response_text.substr(6);
    alert('php error: ' + server_response_text);  
    }
  }

/*
- ajax_singup()
*/

function ajax_signup(server_response_text,html_div)
  {
  aml_status=check_aml(server_response_text.slice(0,6));
  if(aml_status===aml_status_type.pass)
    {
    document.forms['upload_form'].submit();
    }
  else if(aml_status===aml_status_type.fail)
    {
    document.getElementById(html_div).innerHTML=server_response_text;
    }
  else if(aml_status===aml_status_type.undefined)
    {
    server_response_text=server_response_text.substr(6);
    alert('php error: ' + server_response_text); 
    }
  }

/*
- ajax_bookmark()
*/ 

function ajax_bookmark(server_response_text,html_div)
  {
  aml_status=check_aml(server_response_text.slice(0,6));
  if(aml_status===aml_status_type.pass)
    {/*add code here when ready */}
  else if (aml_status===aml_status_type.fail)
    {/*add code here when ready */}
  else if (aml_status===aml_status_type.undefined)
    {
    server_response_text=server_response_text.substr(6);
    alert('php error: ' + server_response_text); 
    }
  }

/*
- ajax_tweet() - takes in sturctured data and converts to html - remove the conversion into another method
*/

function ajax_tweet(server_response_text,html_div)
  {
  var first_split,second_split,tweet_count,return_string='';  
  var aml_status=check_aml(server_response_text.slice(0,6));     
  if(aml_status===aml_status_type.pass)
    {
    server_response_text=server_response_text.substr(6);
    first_split=server_response_text.split(/\|\|/);
    for(tweet_count=0;tweet_count<first_split.length;tweet_count++)
      {
      second_split=first_split[tweet_count].split(/\|/);
      return_string=return_string+'<div class="Bb2b"><img class="a" src="pictures/' + second_split[0] + '.jpg" alt=""/><a class="a" href="javascript:void(0)\">' + second_split[1]  + ' posted ' + view_date(second_split[2],second_split[3]) + '</a><br/><p class="c">' + second_split[4] + '</p></div>';
      }
    fill_id(html_div,return_string);
    }
  else if (aml_status===aml_status_type.fail)    
    {/*add code here when ready */}
  else if (aml_status===aml_status_type.undefined)
    {
    server_response_text=server_response_text.substr(6);
    alert('php error: ' + server_response_text);   
    }
  }

/*
- ajax_null()
*/ 

function ajax_null()
  {
  }


216
2
задан 10 ноября 2011 в 03:11 Источник Поделиться
Комментарии
1 ответ


  • Если вы просто проезжаете идентификаторы элементов, а не сами элементы, ваши имена переменных должны отражать это. (Да, это возможно, чтобы передать элементы дом вокруг-они просто объекты, так как JS заботится. И если вы прошли элементов вместо их идентификаторов, кода делать вещи с ними будет короче, и вы не чувствуете потребность в меня раздражают все эти м# функций).

  • ajax_object возвращает значение false вместо того, чтобы бросить ошибку, если "Аякс" не поддерживается. Кроме того, это сложнее, чем она должна быть. Каждый браузер теперь поддерживает запросы XMLHttpRequest; два activexobject неявляются пособиями для IE6, который ИМО можно смело игнорировать. Единственные, кто до сих пор застрял с ИЕ6 компании с упрямым ИТ-отделов (который, вероятно, все равно черный список ваш сайт как "не по работе") и в Китае (но может они даже не внесенных в белый список сайтов? Полиция мыслей, кажется, очень строгий там). Но даже если бы вы хотели их поддерживать, он может быть проще-вы можете определить запросы XMLHttpRequest себя.

    Наблюдать:

    if (!window.XMLHttpRequest) {
    XMLHttpRequest = function() {
    // try getting the newest version first
    // if that fails, return a mostly-harmless fallback
    // if *that* fails, MSXML2 isn't supported and an error is thrown
    try {
    return new ActiveXObject("Msxml2.XMLHTTP.6.0");
    }
    catch (ex) {
    return new ActiveXObject("Msxml2.XMLHTTP");
    }
    };
    }

    // delete function ajax_object altogether; you don't need it anymore

    function ajax(path,param,ajax_func,html_div) {
    var object=new XMLHttpRequest();
    ...

    ИЕ6 включает MSXML В3, как и в любой ОС начиная с Win2k с SP4. И V2, я верю, поддерживается еще в режиме IE5 и Win98. Если пользователь работает с чем-то старше этого, вещи должны ломаться. Ликующе. И Майкрософт.Для xmlhttp - это просто псевдоним для msxml2 описывается.Для xmlhttp, так что вы не получите что-нибудь пытался использовать это имя в качестве запасного варианта.


  • Это "" вещи немного заползает под меня. Если вы рассчитываете на ответ, чтобы быть интерпретирована через JS, более стандартное решение, как JSON может быть лучшим способом пойти. Это более портативным (в частности, вы в конечном итоге со встроенным кодирования/декодирования для JS и PHP), и вам не нужно вызывать функцию как check_aml. В данном случае, это может быть что-то вроде ВАР ответ = формат JSON.разобрать(server_response_text); если (ответ.статус == 'ошибка') {...}, и вы смогли избавиться от aml_status_type и check_aml. Хотя в идеале, вы бы обработать ответ в ваш внутренний обработчик и передать, что для различных функций.

  • В ajax_bookmark, у вас есть код, как

    if(aml_status===aml_status_type.pass)
    {;}
    else if (aml_status===aml_status_type.fail)
    {;}
    else if (aml_status===aml_status_type.undefined)
    {

    Первые две, если секций не должно существовать, если ты не собираешься что-нибудь в них. Только проверить условия вы действительно намерены что-то делать. (Если вы на самом деле имели код туда и взял его, чтобы уменьшить количество кода, который вы вставляете, вот он. Игнорировать предложение снять. Но на будущее, когда вы опускаете вещи, комментарий типа /* делаем здесь */ или многоточие (...) помогает нам понять, что.)


  • документ.f1_1.отправить();? Вы используете документ.метода getElementById('...') везде; это несовместимо. В любом случае, если вы жестко кодировать форме имя/ID, который является своего рода...Эх.

  • Я вижу ссылки на м2() и М6(). Эти имена бесполезны, без кода на функции, нет никакого способа, чтобы сказать, что они делают. Названия должны быть достаточно информативным, что можно прийти без предварительного знания, читать каждую функцию по отдельности и понять суть, без того, чтобы знать интимные подробности о любой другой функции в скрипте. Как это, мне нужно йо-йо через файл (если были даже определения функции, которых нет в этом примере).

4
ответ дан 10 ноября 2011 в 04:11 Источник Поделиться