1

Phonegapのモバイル アプリケーション用にCodeigniter-restserverを使用して REST API を開発しています。

Phonegapindex.htmlはを使用して読み込まれるためfile://、API はCORSをサポートする必要があります。そして、私はこのCORSが初めてです。

ヘッダーを設定しましたlibraries/REST_Controller.php

header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept');

そして、私はBackbone.jsを使用しています。

これが私のコントローラーです

// This can be removed if you use __autoload() in config.php OR use Modular Extensions
require APPPATH.'/libraries/REST_Controller.php';

class Prop extends REST_Controller
{
    public function __construct() 
    {
       parent::__construct(); 
       $this->load->database();
    }
    function property_get()
    {
        ...
    }    
    function property_post()
    {
    ...
    }
    function attach_image($file_type) 
    {
            if($this->post($file_type) != ""){
                    save_base64_image($file_type,$this->post($file_type));
                    $this->email->attach($_SESSION[$file_type]);
            }
    }       

    function property_delete()
    {
        ...
    }
function share_post()
    {       
    $email_id = $this->post('emailid');

    $config['mailtype'] = "html";
    $this->email->initialize($config);

    $this->email->from('myid@gmail.com', 'mobile app');
    $this->email->to($email_id); 

    $this->email->subject('subject');
    $this->email->message('message');   

    if ( ! $this->email->send() )
    {
        $this->response("Internal server error.", 500);
    } 
    else 
    {
        $result = new stdClass();
        $result->message = 'Email has been sent.';
        $this->response($result, 200); // 200 being the HTTP response code
    }        

    }

public function send_post()
{
    var_dump($this->request->body);
}


public function send_put()
{
    var_dump($this->put('foo'));
}

}

これが私のjQuery ajax呼び出しです。

$.ajax( {
        url: PMSApp.apiUrl + "/share/format/json",
        type: 'post',
        dataType: "json",
        contentType: "application/json; charset=utf-8"
    })
    .done(function(response) {
        console.log(JSON.stringify(response));
})
.fail(function(response) {
        console.log(JSON.stringify(response));
})
.always(function(response) {
        console.log(JSON.stringify(response));
}); 

/share/format/jsonこのAPI には、POSTMAN、chrome 拡張機能を使用してアクセスできますが、file://またはlocalhost://.

編集:

私もに変更しようとしましshare_post()たがshare_gett()、うまくいきました。しかし、POSTで必要です。

私は過去48時間これにこだわっています。多くの解決策を試しましたが、この問題の解決には何も役立ちませんでした。私を助けてください。

4

2 に答える 2

0

Access-Control-Allow-Origin で Chrome を起動する必要があります

このスレッド: https://superuser.com/questions/384871/overriding-access-control-allow-origin-restriction-in-google-chrome

このトレッドを確認してください: Origin is not allowed by Access-Control-Allow-Origin

于 2013-10-14T07:47:37.990 に答える
0

Phonegap には、Web サービス ドメインをホワイトリストに登録するオプションがあります。config xml http://docs.phonegap.com/en/2.3.0/guide_whitelist_index.md.htmlにアクセス元を設定

于 2014-09-20T19:23:48.543 に答える