You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ajax调用失效求助:从商户交易页获取支付后交易详情

Hey there! Let's troubleshoot your Ajax call issue step by step. First, let's start with the C# WebMethod you provided, then cover common pitfalls on the Ajax side since that's where most issues pop up for beginners.

First, Fix & Improve Your C# WebMethod

Your code cuts off at return node.Inne...—I'll assume you meant InnerXml or InnerText to return the actual transaction data. Also, adding error handling will make debugging way easier:

using System;
using System.Web.Services;
using System.Xml;
using System.ServiceModel;

// Make sure your class inherits from WebService (optional but recommended)
public class RetrieveCache : System.Web.Services.WebService
{
    [WebMethod]
    public string RetrieveTransactionData(string ID)
    {
        try
        {
            ChannelFactory<ServiceSoap> PayChannelFactory = new ChannelFactory<ServiceSoap>("ServiceSoap12");
            ServiceSoap Paychannel = PayChannelFactory.CreateChannel();
            XmlNode node = Paychannel.RetrieveCachedData(ID);
            
            // Return the actual content of the XML node—use InnerText if you just need plain text
            return node.InnerXml;
        }
        catch (Exception ex)
        {
            // Return error details to help debug from the frontend
            return $"Error retrieving transaction: {ex.Message}";
        }
    }
}

Common Ajax Mistakes to Fix

Since you didn't share your Ajax code, here are the most frequent issues that break calls to ASP.NET WebMethods, plus a working example:

1. Correct URL & Request Setup

Make sure your Ajax points to the right .asmx endpoint, and uses the right headers/format:

// Trigger this after payment completes
function fetchTransactionDetails(transactionId) {
    $.ajax({
        // Replace with your actual path to RetrieveCache.asmx
        url: "/RetrieveCache.asmx/RetrieveTransactionData",
        type: "POST", // WebMethods require POST by default
        contentType: "application/json; charset=utf-8", // Critical for passing JSON params
        dataType: "json", // Tell jQuery to expect JSON response
        // Wrap params in JSON.stringify()—match the parameter name exactly (case-sensitive!)
        data: JSON.stringify({ ID: transactionId }),
        success: function(response) {
            // ASP.NET wraps WebMethod results in a "d" property
            console.log("Transaction Details:", response.d);
            // Add your code here to display the data on the page
        },
        error: function(xhr, status, error) {
            // Debug errors with these logs
            console.error("Ajax Call Failed:", status, error);
            console.error("Server Response:", xhr.responseText);
        }
    });
}

2. Key Checks for Success

  • Parameter Case Sensitivity: The ID in your Ajax data must match the string ID parameter in your WebMethod exactly (capitalization matters!).
  • CORS Issues: If your merchant website is on a different domain than your WebMethod, you'll need to enable CORS in your ASP.NET project:
    • Add the Microsoft.AspNet.WebApi.Cors NuGet package
    • Add [EnableCors(origins: "*", headers: "*", methods: "*")] to your RetrieveCache class (adjust origins to specific domains for production)
  • Web.config Endpoint Check: Ensure the ServiceSoap12 endpoint is correctly configured in your Web.config—if that's broken, your RetrieveCachedData call will fail silently.
  • Browser Dev Tools: Always check the Network tab in your browser's dev tools to see the exact request/response. A 404 means your URL is wrong; 500 means a server-side error; 403 means permission issues.

内容的提问来源于stack exchange,提问作者abcreddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:48:07