2015-12-22 6 views
5

निकालें मैं एक php फ़ाइल से भेजे गए jquery में एक जेसन प्रतिक्रिया निकालने का प्रयास कर रहा हूं।जेसन प्रतिक्रिया

$.ajax({ 
url: 'index.php?page=register', //This is the current doc 
type: 'POST', 
datatype: 'json', 
data: {'userCheck': username}, 
success: function(data){ 
    // Check if username is available or not 
}, 
error: function(){ 
    alert('Much wrong, such sad'); 
} 
}); 

यह php फ़ाइल से प्रतिक्रिया है:: यह .js कोड है

if($sth->fetchColumn()!=0){ 
     //$response = array("taken"); 
     $response = array("username"=>"taken"); 
     echo json_encode($response); 
     //echo '{"username':'taken"}'; 
    }else{ 
     //$response = array("available"); 
     $response = array("username"=>"available"); 
     echo json_encode($response); 
     //echo '{"username":"available"}'; 
    } 

मैं सभी संयोजनों मैं दोनों फाइलों में सोच सकते हैं की कोशिश की है, लेकिन कुछ भी काम करने के लिए लगता है। यह डेटाबेस में उपयोगकर्ता नाम के लिए एक साधारण जांच है। अगर मैं डेटा मैं प्रतिक्रिया से प्राप्त कर लॉग ऑन सांत्वना देते हैं, मैं इस मिल:

{"username":"available"}<!DOCTYPE html> 
    // The rest of the page html 

तो जानकारी नहीं है, लेकिन मैं इसे कैसे उपयोग करते हैं? मैंने इंटरनेट के चारों ओर कई वाक्यविन्यासों की कोशिश की है, लेकिन अभी तक कोई भाग्य नहीं है। मुझे याद है कि एक जेसन प्रतिक्रिया में केवल वैध जेसन हो सकता है, तो क्या समस्या एचटीएमएल है? मुझे नहीं लगता कि मैं अपने आवेदन की संरचना के कारण इससे बच सकता हूं, इसलिए उम्मीद है कि मेरी वर्तमान संरचना के साथ जेसन तक पहुंचना संभव है।

+2

पर भेज रहे हैं ** हैडर ("सामग्री होने की

beforeSend: function (xhr) { xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8'); xhr.setRequestHeader('Accept', 'application/json'); } 

इस प्रकार अपने jQuery ajax कॉल beforeSend समारोह में अनुरोध हेडर सेट कर सकते हैं -टाइप: एप्लिकेशन/जेसन "); ** ** echo ** से पहले **? – user2182349

+0

@ user2182349 यह क्यों मायने रखता है? उसके पास AJAX कॉल में 'डेटा टाइप: "जेसन" है, इसलिए यह सामग्री प्रकार को अनदेखा कर देगा। – Barmar

+0

@MaDaHoPe: उत्तर दिया;) बाहर निकलने के लिए मत भूलना(); जेसन प्रतिक्रिया में एचटीएमएल पेज से बचने के लिए! – MTroy

उत्तर

2

आप में अजाक्स

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

परिवर्तन

datatype:"json", 

पैरामीटर नाम के मामले का सम्मान नहीं किया गया था, टी होना चाहिए टी

dataType:"json", 

नहीं डब्ल्यू पुन: प्रयास करें

$.ajax 
({ 
    url: 'index.php?page=register', //This is the current doc 
    type: 'POST', 
    dataType: 'json', 
    data: {'userCheck': username}, 
    success: function(data) 
    { 
     // Check if username is available or not 
     switch(data.username) 
     { 
      case "available": 
       // do you want 
       break; 
      case "taken": 
       // do you want 
       break; 
     } 
    }, 
    error: function() 
    { 
     alert('Much wrong, such sad'); 
    } 
}); 

PHP में

बस उस, और भूल नहीं है बाहर निकलने के लिए; अपने जेसन प्रतिक्रिया में एचटीएमएल पेज शामिल करने से बचने के लिए! इस कोड के बाद आने वाले} ".... जो अपने json उत्पादन तोड़ने के लिए और जावास्क्रिप्ट द्वारा यह अपठनीय हो जाता (worste यह बस अपने जावास्क्रिप्ट को तोड़ने,!) है

echo json_encode(["username"=> ($sth->fetchColumn()!=0) ? "taken":"available"]); 
exit; 
+0

आपके उत्तर के लिए धन्यवाद। पूरी तरह से बाहर निकलें; अब मुझे सही जेसन मिल गया है, लेकिन स्विच स्टेटमेंट कुछ भी नहीं करता है। बस एक साधारण चेतावनी के साथ इसका परीक्षण, लेकिन कुछ भी नहीं हो रहा है: -/किसी भी विचार के रूप में क्यों? एक स्ट्रिंग, लेकिन एक नहीं पहुंच वस्तु प्रतीत नहीं है, और कुछ के साथ काम नहीं करते कोड जवाब (मेरे जैसे और barmar): – MaDaHoPe

+0

console.log (डेटा) वास्तव में { "उपलब्ध" "उपयोगकर्ता नाम"} दिखाने? क्या आप एक स्क्रीनशूट ले सकते हैं? – MTroy

+0

ठीक मैं अपने त्रुटि देखते हैं, मेरे अद्यतन जवाब – MTroy

2

आप एक का जवाब कर रहे हैं AJAX कॉल, तो आप सिर्फ JSON उत्तर, नहीं पेज के HTML लौटना चाहिए जोड़ें:।।

exit(); 

इस कोड के बाद तो आप JSON के बाद एचटीएमएल प्रदर्शित नहीं करते

जे एस कोड में , wh कहने के लिए if (data.username == 'available') का उपयोग करें ईथर उपयोगकर्ता नाम उपलब्ध है। एक अपरकेस T साथ

datatype: 'json', 

यह होना चाहिए dataType,:

अपने कोड में दूसरी समस्या आप एक टाइपो यहाँ होता है।

तुम भी रख सकते हैं:

header("Content-type: application/json"); 

लिपि में JSON गूंज से पहले, और jQuery स्वचालित रूप से प्रतिसाद पार्स होगा।

+0

आपके उत्तर के लिए धन्यवाद। बाहर निकलने से मेरी समस्या का पहला हिस्सा हल हो गया। हालांकि, अगर (data.username == 'उपलब्ध') कुछ भी नहीं करता है ?? बस एक साधारण चेतावनी के साथ परीक्षण, लेकिन कुछ नहीं ... @MTroy एस स्विच स्टेटमेंट के साथ, कुछ भी नहीं होता है। मैं पुराने परियोजनाओं (वास्तव में पुराने) और इस सटीक सिंटैक्स काम कर रहा है पर ध्यान दिया है, इसलिए मैं नहीं बल्कि के रूप में हैरान हूँ क्यों यह इस मामले ... – MaDaHoPe

+0

क्या 'console.log (डेटा) करता है' शो में काम नहीं कर रहा? – Barmar

+0

{"उपयोगकर्ता नाम": "उपलब्ध"}। तो जेसन मान्य है। – MaDaHoPe

0

इसके अलावा, आप की तरह तो तुम सख्ती से डेटा प्रकार घोषणा कर रहे json

संबंधित मुद्दे