سؤال

لقد وجدت حول قضايا jQuery JSONP في يتجاهل JQuery Ajax (JSONP) مهلة ولا تطلق النار على حدث الخطأ.

لقد حاولت الحصول على آخر تحديثات Twitter الخاصة بي مع:

var jsonTwitterFeed = "http://twitter.com/statuses/user_timeline/softamo.json?count=3";

$.jsonp({
        url: jsonTwitterFeed,
        data: {},
        dataType: "jsonp",
        callbackParameter: "jsoncallback",
        timeout: 5000,
        success: function(data){
            $.each(data, function(){
                $("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(data.text) + "</li>");                
            });            

        },
        error: function(XHR, textStatus, errorThrown){
            alert("ERREUR: " + textStatus);
            alert("ERREUR: " + errorThrown);
        }
    });

function replaceURLWithHTMLLinks(text) {
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
    return text.replace(exp,"<a href='$1'>$1</a>");
}

يتم تنفيذ مكالمات تنبيه الخطأ مع:

Erreur: خطأ
Erreur: غير محدد

ومع ذلك ، أستطيع أن أرى كائن JSON في Firebug.

أي فكرة عما يحدث؟

هل كانت مفيدة؟

المحلول

لا أعرف ما إذا كان هذا ذا صلة تمامًا ولكن ربما تكون قد فقدت رد الاتصال لـ JSONP في عنوان URL الخاص بك الخلاصة ما لم يتم تعيينه افتراضيًا:

var jsonTwitterFeed = "http://twitter.com/statuses/user_timeline/softamo.json?count=3&callback=?";

أيضًا ، يمكن لمكالمة jQuery Ajax الخاصة بك ببساطة استخدام Ajax الافتراضي وليس JSONP. جرب هذا وأخبرنا:

$.ajax({
        url: jsonTwitterFeed,
        data: {},
        dataType: "jsonp",
        callbackParameter: "jsoncallback",
        timeout: 5000,
        success: function(data){
            var str = '';
            for(var i = 0; i < data.length; i++) { 
                str += '<li>' + replaceURLWithHTMLLinks(data[i].text) + '</li>';
            }
            $("#sNews ul.tweets").append(str);
        },
        error: function(XHR, textStatus, errorThrown){
            alert("ERREUR: " + textStatus);
            alert("ERREUR: " + errorThrown);
        }
    });

function replaceURLWithHTMLLinks(text) {
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
    return text.replace(exp,"<a href='$1'>$1</a>");
}

نصائح أخرى

حاول التغيير

 $.each(data, function(){
    $("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(data.text) + "</li>");                

إلى

$.each(data, function(post, val){
   $("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(val.text) + "</li>");                

يحرر:

لقد غيرت شيئًا آخر لكنني نسيت إضافته إلى الإجابة.

callbackParameter: "jsoncallback",

يجب ان يكون

callbackParameter: "callback",

فقط من أجل الاكتمال هنا صفحة اختبار فعلت ذلك تعمل:

<html>
<head>
   <title>test</title>
   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
   <script type="text/javascript" src="jquery.jsonp-1.1.0.min.js"></script>
   <script type="text/javascript">
      $(document).ready( function() {
         var jsonTwitterFeed = "http://twitter.com/statuses/user_timeline/dougw.json?count=3";

         $.jsonp({
            url: jsonTwitterFeed,
            data: {},
            dataType: "jsonp",
            callbackParameter: "callback",
            timeout: 5000,
            success: function(data){
               $.each(data, function(key, val){
                  $("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(val.text) + "</li>");                
             });            
         },
         error: function(XHR, textStatus, errorThrown){
             alert("ERREUR: " + textStatus);
             alert("ERREUR: " + errorThrown);
         }
     });
         function replaceURLWithHTMLLinks(text) {
            var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
            return text.replace(exp,"<a href='$1'>$1</a>");
         }
      });
   </script>
</head>
<body>
   <div id="sNews">
      <ul class="tweets">
      </ul>
   </div>
</body>

حاولت مع الكود التالي ، وحصلت على وظيفة النجاح لإطلاق النار بشكل صحيح.

$.getJSON(jsonTwitterFeed, {
    success: function(data){
        $.each(data, function(){
            $("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(data.text) + "</li>");                
        });            

    },
    error: function(XHR, textStatus, errorThrown){
        alert("ERREUR: " + textStatus);
        alert("ERREUR: " + errorThrown);
    }
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top