php एचटीटीपीओस्ट(कॉन्युलर 2)(पीएचपी सर्वर साइड) के साथ जेसन ऑब्जेक्ट कैसे पोस्ट करें




json angular (2)

अंगुलर कोड में कुछ भी गलत नहीं दिखाई देता है समस्या यह है कि PHP को प्राप्त करने की क्या उम्मीद है। मैं एक PHP विशेषज्ञ नहीं हूँ, लेकिन जैसा कि आपने उल्लेख किया है कि यह jQuery के साथ ठीक काम करता है, तब यह इंगित करता है कि आपका PHP एक URL- एन्कोडेड मान की अपेक्षा कर रहा है (जैसा कि jQuery के साथ काम करने की आदत है), एक JSON मान नहीं।

दूसरे शब्दों में, सर्वर क्या पार्स करने की कोशिश कर रहा है:

search=person

आप जो भेज रहे हैं वह है:

{ "search": "person" }

नीचे दिए गए प्रारूपों जैसे कि आप चाहते हैं कि इसे भेजने के लिए कुछ और कोशिश करें:

let test_this = { "search": "person" };
let headers = new Headers ({ 'Content-Type': 'application/x-www-form-urlencoded' });
let options = new RequestOptions({ headers: headers, method: "post" });

http.post(this.post_url, test_this, options)

मैं पोस्ट JSON को कोणीय 2 से पीएचपी बनाने का प्रयास कर रहा हूं लेकिन यह काम नहीं करता क्योंकि PHP पक्ष में $_REQUEST चर में कुछ भी नहीं है

कोड:

searchHttp({body}: any): Promise<any>
{   
    let headers = new Headers ({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers, method: "post" });

    let test_this = {"search": "person"};

    return this.http.post(this.post_url, JSON.stringify(test_this), options)
        .toPromise()
        .then(response =>  
            {   
                return response.text();
            })  
        .catch(this.handleError);
}

क्या मुझे याद आ रही है? मुझे पता है कि डाक एक और प्रारूप के साथ काम करता है क्योंकि मेरे पास एक अन्य प्रश्न में उत्तर दिया है।

इसके अलावा, http.request तुलना में http.post बेहतर है?

संपादित करें:

कांगारू / जावास्क्रिप्ट विशेषज्ञों के साथ बहुत परामर्श करने के बाद, उनका मानना ​​है कि यह एक पीएचपी मुद्दा है। तो php पक्ष पर JSON ऑब्जेक्ट्स को स्वीकार करने का ज्ञान किसी को भी खुशी से स्वागत किया जाएगा


कोणीय 2 क्लाइंट साइड पार्ट

 ngOnInit() { 

        let body=Api+'product.php'+'?id=' + this.link_id;
        this._callservice.callregister(body)
                    .subscribe( data => {
                                this.outputs=data;                           
                       }, 
                    error => console.log("Error HTTP Post"),
                    () => console.log("completed") );  
      }    
    }

call.service.ts

import {Injectable} from '@angular/core';
import {Router} from '@angular/router';
import {Http, Response, Headers, RequestOptions} from '@angular/http';
import {Observable}     from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';

@Injectable()
export class AuthenticationService {

  constructor(private _http:Http){}

  postregister(api:any){
//      console.log(api);
  let headers = new Headers({'Content-Type':'application/x-www-form-urlencoded'});
  let options = new RequestOptions({ headers: headers, method: "post"});
      return this._http.get(api,options)
          .map(res => res.json())
          .catch(this.handleError);
  }
  private handleError (error: Response) {
        console.error(error);
        return Observable.throw(error.json().error || ' error');
    }

}

सर्वर पक्ष PHP सर्वर पक्ष पर सुनिश्चित करें कि आपके पास ये तीन पंक्तियां PHP कोड में हैं।

   header('Access-Control-Allow-Origin: *');    
    header('Access-Control-Allow-Headers: X-Requested-With');
    header('Access-Control-Allow-Methods: POST, GET, OPTIONS');

Php फ़ाइल:

  <?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Requested-With');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
$servername = "localhost";
$username1 = "root";
$password = "root";
$dbname = "product";

$e=array("error"=>1,"message"=>"Account Already Exists");

$accountCreated = array( "error" =>0, 
                         "data" => array(
                                   "username" => "amit" , 
                                   "password" => "anypassword",
                                   "role"=> "user", 
                                   "id" => "anyid" ) );

// Create connection
$conn = mysqli_connect($servername, $username1, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

    $username = $_GET["username"];
    $Pass = $_GET["password"];
    $role= $_GET["role"];
    $sql="SELECT COUNT(*) as user FROM users WHERE username = '$username'";
    $result = mysqli_query($conn,$sql);
    $line = mysqli_fetch_assoc($result);
    $count = $line['user'];
    if($count!=0)
       {
          echo json_encode($e);
       }
    else
       {
         $sql="INSERT INTO users(username,password,role)VALUES('$username','$Pass','$role')";
         $result=mysqli_query($conn,$sql);
         $sql="select * from users where username ='$username'";
         $result=mysqli_query($conn,$sql);
         $line=mysqli_fetch_assoc($result);
         {
             $accountCreated['data']['username']=$line['username'];
             $accountCreated['data']['password']=$line['password'];
             $accountCreated['data']['role']=$line['role'];
             $accountCreated['data']['id']=$line['id'];
         }
         echo json_encode($accountCreated);
        }

 ?>

मुझे आशा है कि यह आपके लिए काम करेगा .. json के लिए मुझे लगता है कि आपको विकल्प के रूप में जाना चाहिए और विकल्प में प्राप्त मूल्यों के लिए जेसन डीकोड का उपयोग करना चाहिए।







angular2-http