2011-09-08 52 views
0

我一直盯着這個6個小時。我不明白。爲什麼我的jquery.ajax()不會觸發成功或錯誤?

$.ajax({ 
    url: "http://www.band.dev:8888/datafeeder/hello_world", 
    success: function(data) { 
     alert (data); 
    }, 
    error: function(request, status, error) { 
     alert(status + ' - ' + error); 
    } 
}); 

我跑甲基苯丙胺在本地,當我直接打網址它的回聲「世界你好」,沒有任何問題。當我運行這個,我得到一個對話框'錯誤 - '。我試着在裏面添加dataType:'html',沒有任何幫助。思考?

- 編輯 -

所以這是我的實際問題。當我運行這個時,沒有成功或錯誤被激發,並且當我直接點擊URL時,我可以看到JSON是正確的。 (順便說一句,相對URL修復工作了上面的代碼位)。

$("#member_type").autocomplete({ 
     source: function(request, response) { 
      $.ajax({ 
       url: "/datafeeder/get_member_types/json", 
       dataType: "jsonp", 
       data: { 
        //maxNum: 12, 
        searchString: request.term 
       }, 
       search: function(event, ui) { 
        alert('searching'); 
       }, 
       success: function(data) { 
        alert (data); 
        response($.map(data, function(item) { 
         return { 
          label: item.type, 
          value: item.id 
         } 
        })); 
       }, 
       error: function(request, status, error) { 
        alert (status + ' - ' + error); 
       } 
      }); 
     } 
}); 

回答

2

你可能會擊中same origin policy限制其禁止您發送AJAX請求到一個比託管腳本不同的域。確保你是不是違反了這項政策,最好的辦法是使用相對網址,AJAX調用:

$.ajax({ 
    url: "/datafeeder/hello_world", 
    success: function(data) { 
     alert (data); 
    }, 
    error: function(request, status, error) { 
     alert(status + ' - ' + error); 
    } 
}); 

對於這個AJAX請求工作,主持HTML頁面必須在http://www.band.dev:8888主持這個JavaScript。

+0

我之所以這麼想是因爲我的原始背景是在Flash開發中,而跨域策略是非常必要和常見的。但有了這個,我看到http://jqueryui.com/demos/autocomplete/#remote-jsonp用於自動完成輸入,並且他們正在從外部託管的腳本中提取。這僅僅是因爲他們返回的JSONP格式? – Tim

+0

@Tim,對於JSONP來說,你的服務器必須返回JSONP,而不是''hello world''。一個JSONP看起來可能看起來像這個'someCallback({value:'hello world'})'當然你可以通過傳遞請求參數來個性化'someCallback'的名字。 –

+0

http://stackoverflow.com/questions/2887209/what-are-the-differences-between-json-and-jsonp/2887218#2887218這可能有助於理解差異 – Rafay

相關問題