2013-10-24 7 views
1

Привет, я просто попробовал проверить, будет ли функция ошибки возвращать предупреждение, но она не срабатывала. Я изменил ссылку на URL-адрес, надеясь, что он будет генерировать предупреждение, так как он не сможет найти или получить данные json. Все, что я получаю «Uncaught TypeError: Не удается прочитать свойство„длина“неопределенной Jquery-1.9.1.min.js: 3»Функция ошибки не работает

$(document).on('pagebeforeshow', '#blogposts', function() { 
    //$.mobile.showPageLoadingMsg();  
    $.ajax({ 
     url: "http://howtodeployit.com/api/get_recent_po", 
     dataType: "json", 
     jsonpCallback: 'successCallback', 
     async: true, 
     beforeSend: function() { 
      $.mobile.showPageLoadingMsg(true); 
     }, 
     complete: function() { 
      $.mobile.hidePageLoadingMsg(); 
     }, 
     success: function (data) { 
      $.each(data.posts, function (key, val) { 
       console.log(data.posts); 
       var result = $('<li/>').append([$("<h3>", { 
        html: val.title 
       }), $("<p>", { 
        html: val.excerpt 
       })]).wrapInner('<a href="#devotionpost" onclick="showPost(' + val.id + ')"></a>'); 
       $('#postlist').append(result).trigger('create'); 
       return (key !== 4); 
      }); 
      $("#postlist").listview(); 
     }, 
     error: function (data) { 
      alert("Data not found"); 
     } 

    }); 
}); 
+2

async: true, по умолчанию. – underscore

+2

afaik $ .ajax будет вызывать ошибку только в случае сбоя запроса, игнорируя возвращенные данные. но я не уверен в этом. бросьте неперехваченное исключение в свой метод api, чтобы увидеть, как реагирует ваш javascript. – Tschitsch

ответ

0

Может быть здесь $.each(data.posts, data.posts не определено, и именно поэтому вы получаете ошибка. Log data в обратном вызове успеха и посмотреть, что он содержит.

+0

Я думаю, что это точка OP. Если URL-адрес возвращает 404, вызов вызова успеха не должен вызываться. – CodingIntrigue

+0

Я бы предположил, что RGraham упомянул – Chelseawillrecover

+0

@Chelseawillrecover просто попробуйте, что я сказал)) – karaxuna

1

Я думаю, что проблема заключается в том, что когда вы делаете запрос AJAX, ваш код выполняет обратный вызов success, а не обратный вызов error. Таким образом, при выполнении:

$.each(data.posts, function(key, val) {

$.each функция пытается получить длину data, которая является NULL.

Непонятно, что вы определили функцию обратного вызова jsonp, и все же вы по-прежнему используете обратные вызовы и error. Этот SO вопрос может немного помочь:

Use of success/jsonpCallback with ajax request

0

Я создал a clean Fiddle. Открытие данного URL-адреса дает 301 переадресацию, за которым следует ответ 200 JSON. Код состояния HTTP говорит, что все в порядке, поэтому jQuery не знает, что произошла ошибка.

Здесь вы смешиваете две разные концепции: обратный вызов ошибки jQuery для сетевых ошибок и всех этих вещей. Если вы переносите состояния ошибки внутри вашего JSON с кодом состояния HTTP 200, вам придется иметь дело с ним самостоятельно в обратном вызове успеха.

К сожалению, SO не позволяет JS-скрипку ссылки без кода:

beforeSend: function() { console.log('beforeSend'); }, 
complete: function() { console.log('complete'); }, 
success:function (data) { console.log('success') }, 
error: function(data) { console.log('error') } 
+0

ничего в скрипке – Chelseawillrecover

+0

Извините, должен нажать Сохранить сначала;). Обновлено. –

+0

beforeSend myscript.js: 11 myscript.js ошибка: 14 полный myscript.js: 12 GET http://howtodeployitsdf.com/api/get_recent_po – Chelseawillrecover

0

Спасибо всем за ваш вклад. Я принял все предложения. Рекомендация от Джейсона, похоже, имела больше смысла, поэтому, исследуя его предложение, я пришел к этому site, чтобы узнать больше о jasonCallback. удаление опции jasonCallback, хотя это не исправить проблему, но странно эта проблема, похоже, связана с URL-адресом, который я использовал для моего json caalback.

Что я тогда должен был изменить URL-адрес от «http://howtodeployit.com/api/get_recent_po» до «http://howtodeployit.com/category/daily-devotion/feed/?json=recentstories», и это сработало. Несмотря на то, что оба возвратили ошибку в консоли, а вторая - ту, которая вызвала функцию ошибки. Почему я смотрю на это.

Смежные вопросы