GPS Receiver in Frequency Domain I'm trying to transmit and receiver the GPS payload in both Time and Frequency Domain.

For transmitting and receiving in time domain :

numBits = 10;                        % LFSR length
codeLength = 2^numBits-1;           % Spreading code length 

payload1 = 1*(rand(1,100)&gt;0.5);
payload2 = 1*(rand(1,100)&gt;0.5);
payload3 = 1*(rand(1,100)&gt;0.5);

payload1 = 2*payload1 - 1;            %BPSK Modulation 
payload2 = 2*payload2 - 1;            %BPSK Modulation 
payload3 = 2*payload3 - 1;            %BPSK Modulation 

%  payload1 = ones(1,10);
%  payload2 = ones(1,10)*2;
%  payload3 = ones(1,10)*3;
%% PN code generation

% initial sequence is taken from IRNSS document
goldCode1 = generateGoldCode(935,239,codeLength,numBits);
goldCode1 = 2*goldCode1-1;                        % Assign code to 1 to 1 and -1 to 0

goldCode2 = generateGoldCode(38,381,codeLength,numBits);
goldCode2 = 2*goldCode2-1;

goldCode3 = generateGoldCode(564,561,codeLength,numBits);
goldCode3 = 2*goldCode3-1;

%% At transmitter part 
payloadData1 = kron(payload1,goldCode1);         % Product of payload data and gold code to spread the sequence
payloadData2 = kron(payload2,goldCode2);    
payloadData3 = kron(payload3,goldCode3);


TxData = (payloadData1 + payloadData2 + payloadData3);

%% At receiver part 
%% Time Domain 
crossCorr = xcorr2(TxData,goldCode2);              
outputData = crossCorr(codeLength:codeLength:end)/codeLength;


For Frequency domain I want to receive each bit at a time:

starting =1;
i=0;
crossCorr_temp=[zeros(1,100)] ;
goldCodeFFT = conj(fft(goldCode2));
for val = 1023:1023:length(TxData)
  payloadFFT = fft(TxData(starting:val));
  crossCorr_FFT = ifft(payloadFFT .*goldCodeFFT);
  corr_time = crossCorr_FFT(1:end)/codeLength; **#Doubt here**
  starting = starting +1023;
  i=i+1;
end


How do I approach this frequency-domain way to receive the GPS payload bits?
I do not see any issues with your approach for the frequency domain computation, given that the following is a circular convolution in the time domain of the two signals a and b:

$$corr(a,b) = ifft(fft(a)fft(b)^*)$$

But to receive each bit you need to evaluate the maximum in each interval to determine if it is positive or negative. 

Further in actual application, the received signal would be sampled higher than one sample per bit, with the unknown Doppler offset frequency removed (carrier recovery) and aligned such that your start of the FFT is at the start of the symbol. There are also 20 1023 length symbols per actual data bit in GPS. 

In this case the FFT would be rate matched to the received signal. You could also process longer blocks as I show in the example plot below, by simply zero padding the rate-matched prn sequence out to the length of the data block prior to taking the FFT.  In the plot below this was done for 1e6 samples of actual received signals sampled at 20 MSps.