2016-01-25 176 views
0

我已經嘗試了無數的代碼排列,離成功最近的是關於「同源策略」的警告,或者我反彈到了登錄頁面,在使用CodeIgniter編寫的應用程序的頁面中。JavaScript:「同源策略」失敗

爲了保持這種明智的,對domain-one.com起見,我使用的是:

(function($) { 
    var url = 'http://domain-two.com/get_data?callback=?'; 
    $.ajax({ 
     type: 'GET', 
     url: url, 
     async: false, 
     contentType: "application/json", 
     dataType: 'jsonp', 
     success: function(json) { 
      console.log(json); 
     }, 
     error: function(e) { 
      console.log(e.message); 
     } 
    }); 
})(jQuery); 

在上domain-two.com PHP中,我使用的是:

public function get_data() { 
    $results = $this->model->method(); 
    if (count(results)>0): 
     foreach (results as $array): 
      $array['index'] = $array['value']; 
      $array[] = $array_result; 
     endforeach; 

     header('content-type: application/json; charset=utf-8'); 
     header("access-control-allow-origin: *"); 

     $json = json_encode($array); 

     # JSON if no callback 
     if(! $this->input->get('callback')): 
      exit($json); 
     endif; 
     # JSONP if valid callback 
     if(is_valid_callback($this->input->get('callback'))): 
      exit($this->input->get('callback') . "(" . $json . ")"); 
     endif; 

    else: 
     return false; 
    endif; 
} 

在這一點上,值得一提的是,當我訪問PHP方法的鏈接時,它給了我所需要的數據。但是,如果我通過包含JavaScript的網頁執行此操作,它不會(「同源策略」錯誤,或者我退回到登錄頁面)。

有關我如何使用回調的幫助充其量只是不足(某些人建議使用實際的回調函數,其他人聲稱不需要此類函數)。

在這5天后,我不知道我的意思是在做什麼,因爲有很多不同的技術,這些技術似乎都不適合我。

任何意見將非常歡迎!

+0

你的PHP'反彈到page'聽起來像是你應該認證標誌,但我沒有看到的是,在你的代碼的證據?另外,您應該避免使用'async:false',因爲它已被棄用。還有其他方法可以確保您等待ajax調用完成,如承諾。 –

+0

不,該控制器中沒有驗證碼。我認爲回調會導致CodeIgniter出現問題,並且可能會剝離該方法的URL參數。 如果有'async'的替代品,現在是分享的好時機。 –

+0

使用[promises](http://www.htmlgoodies.com/beyond/javascript/making-promises-with-jquery-deferred.html)。 –

回答

1

在上domain-two.com

header('Access-Control-Allow-Origin: http://domain-one.com'); 
header('Access-Control-Allow-Origin: http://domain-two.com'); 
+0

是的,這也讓我反彈到登錄頁面。 –

+0

最後,在擺放位置後,這是正確的答案。 –