3

javascriptファイルがあり、phpサーバー側で関数を呼び出し、ajaxを使用して結果をクライアント側に返したいのですが、特定のphp関数にリクエストを送信する方法がわかりません。

これが私のファイルです:

javascriptファイルは基本的にhtmlフォームからユーザー名を取得します。そのユーザー名をphpに送信し、データベースの可用性を確認したいと思います。

something.js

function check_availability()
{
    var username = $.trim(document.getElementById('usernameField').value);
    var xmlhttp= new XMLHttpRequest();

    // not sure how to make the request here to check_availability() under php
}

PHPファイルは、jsファイルから渡されたユーザー名をデータベースと照合します。使用可能な場合はtrueを返し、そうでない場合はfalseを返します。

something.php

    class Something_Model {
    private $data;
    private $table;

    public function __construct() {
        $this->data = new udata(DBSERVER, DBUSERNAME, DBPASSWORD, DBNAME);
    }

    # check for username availability
    public function check_availability()
    {
        // make the check here, but needs to retrieve username from js file
        echo "here";
    }
}

それで、Something_Modelクラス内で、javascriptからcheck_availability()呼び出しを行いたいのですが、誰かがこのajax呼び出しを行う例を教えてもらえますか?また、結果をjavascriptに戻すにはどうすればよいですか?JSONオブジェクトとしてエンコードする必要がありますか?

どうもありがとう。

4

4 に答える 4

5

PHPで関数を直接呼び出すことはできませんが、PHPページを呼び出すことはできます。PHPページはPHP関数を呼び出すことができます。例えば...

service.php

include_once('something.php');
$model = new Something_Model();
$model->check_availability();

something.js

function check_availability() {

    var request = new XMLHttpRequest();
    request.open('GET', 'http://yoursite/service.php', false);
    request.send();

    if (request.status === 200) {
      alert(request.responseText);
    }
}

XMLHttpRequestの非常に単純な例を使用しました。この例は、要求が行われている間、実際にブロックします。実際には、コールバックを使用して非同期で実行できるようにすることもできますが、答えはできるだけ短くしたいと思います。

于 2012-11-12T20:43:14.740 に答える
3

クライアント側のJavaScriptからPHP関数を呼び出すことはできません。

URLに対してHTTPリクエストを行うことができます。

そのURLはPHPで処理できます。

関数を呼び出すには、関数の定義と関数関数の呼び出し以外は何もしないPHPスクリプトにすることができます。(または、クエリ文字列をチェックして、その中のデータの値に基づいて関数を呼び出すこともできます)。

データは任意の形式で返すことができます。構造化データを返したい場合は、JSONが適切な形式です。

于 2012-11-12T20:39:29.870 に答える
0

あなたがやろうとしていることは「RESTWebサービス」と呼ばれています。素人の用語では、結果は実際にはWebページとして表示されることを意図しておらず、プログラムで取得され、処理され、主にAJAX/javascriptなどのテクノロジーを使用して視覚化されるWebページです。

戻り型が非常に単純でない限り(この場合、テキストの文字列を返すことができます)、結果のデータ型が複雑な場合、javascriptで解析可能にするための最良の方法は、JSONオブジェクトとしてエンコードすることです-したがって、として保存できます次に、そのコンポーネントを取得できるようにする変数-http ://php.net/manual/en/ref.json.phpを参照してください

于 2012-11-12T20:42:14.737 に答える
0

@Rhsがhttp://phery-php-ajax.netで指摘したように、pheryライブラリを使用できます。

コードは次のようになります。

Phery::instance()->set(array(
  'check_availability' => array(new Something_Model, 'check_availability');
))->process();

次に、コードから呼び出します

// rename put attribute name="username" on your field
var local_phery = $('#usernameField').phery();
local_phery.make('check_availability').bind('phery:json', function(event,data){
  // deal with username suggestions
});
local_phery.remote(); // call the check_availability PHP function

クラスでは、アラート/DOM操作を行う必要があります

class Something_Model {
private $data;
private $table;

public function __construct() {
    $this->data = new udata(DBSERVER, DBUSERNAME, DBPASSWORD, DBNAME);
}

# check for username availability
public function check_availability($data)
{
    $r = new PheryResponse;

    if ($this->get(array('username'=> $data['username']))){
      $r->alert('Not available!');
      // Or something like using colorbox library, would be like $.colorbox({html: ''});
      $r->jquery()->colorbox(array('html' => 'Not available!'));
      $r->json($suggestions); // $suggestions would be an array with username suggestions
    } else {
      $r->alert('Available!');
    }
    // make the check here, but needs to retrieve username from js file
    return $r;
}
}
于 2012-11-13T00:47:32.987 に答える