Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Функция ajax
 
 автор: olegvasil   (30.07.2014 в 20:53)   письмо автору
 
 

Здравствуйте !У меня следующая проблема :пытаюсь отправлять AJAX - запросы на сервер ,при помощи функции ajax в jQuery,но вызывается функция error ., которая должна вызываться в случае ошибки .На сервере никаких ошибок нет(я проверил).В js файле все функции ,которые используются как обработчики некоторых событий тоже определены выше функции ajax.А вот в чем причина возникновения ошибки я так и не понял.Даже в консоле браузера нет ошибок ,,связанных с синтаксисом.Помогите пожалуйста разобраться .

  Ответить  
 
 автор: confirm   (31.07.2014 в 05:03)   письмо автору
 
   для: olegvasil   (30.07.2014 в 20:53)
 

И каким образом помочь, такими же рассуждениями как у вас?

  Ответить  
 
 автор: olegvasil   (31.07.2014 в 07:51)   письмо автору
 
   для: confirm   (31.07.2014 в 05:03)
 

Попробую по другому ввести вас в курс дела.
Скажу сразу ,что я использую для отправки ajax - запросов функцию ajax() которая есть в библиотеки jQuery.Этой функции в качестве объекта с настройками могут передаваться несколько событий ,например , я использую complete,success,error. С каждым из перечисленных выше событий связана отдельная функция .Все эти функции находятся выше определения функции ajax().Ну и вот ,когда я вызываю функцию ajax() , она постоянно вызывает функцию error .хотя не в js скрипте , не в принимающем запрос php скрипте ошибок нет.И где в данном случае искать ошибку я не знаю.

  Ответить  
 
 автор: confirm   (31.07.2014 в 07:57)   письмо автору
 
   для: olegvasil   (31.07.2014 в 07:51)
 

Я знаю что такое Ajax из jQuey. От вас не рассказ требуется, по которому вам никто ничего ответит, а ваш код, в котором явно есть ошибки. Показывайте его, вот тогда можете рассчитывать и на какой-то ответ.

  Ответить  
 
 автор: olegvasil   (31.07.2014 в 09:57)   письмо автору
 
   для: confirm   (31.07.2014 в 07:57)
 

Так и бы и сказали.Обычно код не кто не хочет смотреть


Код php скрипта , который принимает запрос

<?php
    
require_once "start.php";
    
$request = new Request();
    
$api = new API();
    
$result false;
    if (
$request->func == "edit"$result $api->edit($request->obj$request->value$request->name$request->type);
    elseif (
$request->func == "delete"$result $api->delete($request->obj$request->id);
    elseif (
$request->func == "add_comment"$result $api->addComment($request->parent_id$request->article_id$request->text);
    elseif (
$request->func == "load_menu_1"$result $api->getAllElMenuOnType(1);
    elseif (
$request->func == "load_menu_2"$result $api->getAllElMenuOnType(2);
    elseif(
$request->func == "Add_New_Item_Menu"$result $api->Add_New_Item_Menu($request->data,$request->data_info);
    elseif(
$request->func == "deleteItemInMenu") echo 100;
    elseif(
$request->func == "editItemInMenu"$result $api->editItemInMenu($request->data_info$request->data);
    if (
$result !== false) echo json_encode(array("r" => $result"e" => false));
      else echo 
json_encode(array("r" => $request->func "e" => true));
?>

A вот код js файла , который отправляет запрос.

var load_first = null;
var load_type_menu = 1;
var type_el = 0;
var edit = false;

function genObj(func,data_info,data,param){
   if(param) {
        var obj  = {
          func : func,
          data_info : data_info,
          data : data
        };
   }
   else {
        var obj = {
          func : func
        };
   }

    return  obj;
}

function clearMessage(){
    $("#message").empty();
}

function setMessage(message){
    $(".message").text(message);
}



function func_success_add(data){
    var data = JSON.parse(data["r"]);
    if(data.parent_id) addNewEl(data,true);
    else addNewEl(data,false);
    setMessage(data.message);
}

function getDataFromForm(){
    var data = {
        title :  $(".title:eq(1)").val(),
        alias :  $(".link:eq(1)").val(),
        meta_desc : $(".meta_desc:eq(1)").val(),
        description :  $(".description:eq(1)").val(),
        meta_key : $(".meta_key:eq(1)").val(),
        parent_name : (type_el == 2) ? $("#choose_section option:eq(" + $("#choose_section").val() +")").text() : 0
    }
    return JSON.stringify(data);
}

function toggleMenu(id){
    $("#list_items div").remove();
    ajaxSend(genObj("load_menu_" + id,"","",false),func_success);
}

if(load_first == null){
    ajaxSend(genObj("load_menu_1","","",false),func_success);
    load_first == true;
}

function dhEl(el , opt){
    if(!opt)  el.attr("style" , "display:none");
    else if(opt === true) el.attr("style" , "display:block");
    else el.attr("style" , "display:inline-block");
}


function resetForm(){
    dhEl($("#fields"),false);
    dhEl($("#choose_type"),false);
    dhEl($("#choose_section"),false);
}


function  hiddenFields(bul){
    if(bul) dhEl($("#fields table tr:eq(2) td, #fields table tr:eq(3) td, #fields table tr:eq(4) td"),false);
    else dhEl($("#fields table tr:eq(2) td , #fields table tr:eq(3) td, #fields table tr:eq(4) td"),true);
}

function showForm(){
    resetForm();
    if(load_type_menu == 1){
         dhEl($("#choose_type"),true);
         if(type_el == 1 || type_el == 2){
            dhEl($("#fields"),true);
              if(type_el == 2) {
                 dhEl($("#choose_section"),true);
                 $("#choose_section option").remove();
                 $("#list_items > .item  > a").each(function(i){
                 $("#choose_section").append("<option value = " + i +">" + this.innerText + "</option>");
                 });
              }
        }
        else dhEl($("#fields"),false);

        hiddenFields(false);
    }
    else if(load_type_menu == 2){
        dhEl($("#choose_type"),false);
        dhEl($("#choose_section"),false);
        dhEl($("#fields"),true);
        hiddenFields(true);
    }
}


$(function(){
    $("#add_new_el").fancybox();
    $("#add_new_el").click(function(){
        showForm();
    });

    $("#choose_type").bind("change" , function(){
        type_el = $(this).val();
        showForm();
    });
    $("#choose_type_menu select").bind("change",function(){
        load_type_menu = $(this).val();
        toggleMenu(load_type_menu);
        showForm();
    });
    showForm();
});


function sendFormEdit(){
    var data = getDataFromForm();
}

function getTemplateEl(data,param){
   var attr_id = (param) ? "id='item_" + data.id + "'" : "";
   var new_str = "<div class = 'item' "+ attr_id +">";
   new_str  += "<a href = '" + data.link + "' >" +  data.title + "</a>";
   new_str += "<div class = 'functions''>";
   new_str += "<a  class = 'edit_item' href = '#edit_item' >Редактировать</a>\n";
   new_str += "<a    class =  'edit_delete' href =  >Удалить</a>";
   new_str += "</div>";
   return new_str;
}

function addNewEl(data,param){
    if(!param){
      var str  = getTemplateEl(data,true);
      $("#list_items").append(str);
    }
    else{
       var str  = getTemplateEl(data,false);
       $("#list_items > div[id=item_"+  data.parent_id).append(str);
    }
    if(data.categories) {
        for(j = 0; j < data.categories.length;j++) {
          var str  = getTemplateEl(data.categories[j],false);
          $("#list_items #item_" + data.categories[j].parent_id).append(str);
        }
    }
}

function func_success(data){
    data  = JSON.parse(data["r"]);
    for(el in data) addNewEl(data[el]);
}

function func_error(x,xx){
    alert(xx);
}

function searchEl(title){
    $(".item > a").each(function(i){
        if($(this).text() == title) return $(this);
    });
}

function func_success_edit(data){
    data  = JSON.parse(data["r"]);
    var el = searchEl(data.title);
    $(el).attr("href",data.link);
    $(el).attr("title",data.title);
    setMessage(data.message);
}


function sendFormAdd(){
    var data = getDataFromForm();
    var data_info = (type_el == 1) ? "type_el=section" :  (load_type_menu == 2) ? "type_el=item" : "type_el=category";
    //$("body").empty().text(data);
   ajaxSend(genObj("Add_New_Item_Menu",data_info,data,true),func_success_add);
}

function func_success_delete(data){
/*
    data  = JSON.parse(data["r"]);
    var el = searchEl(data.title);
    $(el).parent().remove();
    setMessage(data.message);
    */
}

function deleteItem(obj){
   var data_info = ($(obj).parent().parent().attr("id") == "") ? "type_el=category" : (load_type_menu == 2) ? "type_el=item" : "type_el=section";
    data_info += "&title=" + $(obj).parent().parent().find(" > a").text();
    var obj  = {
          func : "deleteItemInMenu",
          data : data_info
    };
    ajaxSend(obj,func_success_delete);
}


function func_complete(){
    showForm();
    $(".edit_item").fancybox();
    $("#edit_item  > div").remove();
    var form =  $("#add_item form").clone();
    form.find("select , h3").remove();
    form.find("div").removeAttr("id").attr("style" , "display:block");
    form.find("input[type='button']").attr("id","edit_el");
    $("#edit_item").append(form.html());
    $("#edit_el , #add_el , .edit_delete").unbind("click");
    $("#edit_el").bind("click", function(){
        sendFormEdit();
    });
    $("#add_el").bind("click" , function(){
        sendFormAdd();
    });
    $(".edit_delete").bind("click" , function(){
        deleteItem($(this));
    });
}


function ajaxSend(data,f_s){
     $.ajax({
              url: "/api.php",
              type: "POST",
              data: (data),
              dataType: "text",
              error: func_error,
            complete : func_complete,
              success: function(result) {
              var  result = JSON.parse(result);
                 f_s(result);
              }
     });
}



/*
function func_complete(){
    alert("complete");
}
*/




/*
function del(){
    var obj  = {
          func : "deleteItemInMenu",
          data_info : "type_el=category&title=Кармелита2"
    };
    ajaxSend(obj,func_success_delete);
}

del();

*/

  Ответить  
 
 автор: confirm   (31.07.2014 в 10:32)   письмо автору
 
   для: olegvasil   (31.07.2014 в 09:57)
 

Так не лучше, а так должно быть.

Наворочено чего-то не понять, ибо непосредственно отправка это всего лишь одна функция, а что означают остальные навороты...

Вот так проверяйте:

function ajaxSend(){ 
     $.ajax({ 
              url: "api.php", //зачем в путях слеш?
              type: "POST", 
              data: {edit : значение для проверки, которое вы знаете}, //зачем тут у вас скобки?
              dataType: "json", 
              success: function(d) { 
                  alert(d);
              } 
     }); 
}


вызвав функцию как угодно. Уж точно сервер ответит. А это означает, что ошибки ваши в остальных наворотах.

Получить форму как объект, для этого есть метод в jQuery, если ваш getDataFromForm для этого.

Поведение браузера при асинхронном запросе, если данные для него содержат ошибки, либо до запроса есть ошибки, как раз и может быть таким - молчок, а результата нет. Для проверки этого контролируйте сеть в отладчике.

А в секции РНР не лучше ли без многочисленных elseif?

  Ответить  
 
 автор: confirm   (31.07.2014 в 10:01)   письмо автору
 
   для: olegvasil   (31.07.2014 в 07:51)
 

Ваш код представленный действительно вряд ли кто захочет смотреть, он не форматирован, а значит читать его трудно.
Ответил сюда, чтобы вы отредактировали свое сообщение, обрамив код BB-тегами CODE.

  Ответить  
 
 автор: olegvasil   (31.07.2014 в 10:11)   письмо автору
 
   для: confirm   (31.07.2014 в 10:01)
 

Я нашел наконец-то ошибку. Не поверите она заключалось в том , что у ссылки , по которой происходил клик был пустой атрибут href и поэтому происходила вся эта ерунда .

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования